Lektionen des Moduls (4/4)
Sets
Ein Set (Menge) ist eine Sammlung von einzigartigen, ungeordneten Elementen. Drei Superkräfte:
- Automatische Deduplizierung: Das zweimalige Hinzufügen desselben Elements hat keine Auswirkung.
- Mitgliedschaftstest in O(1):
x in sist extrem schnell, selbst bei Millionen von Elementen (es ist Hash-basiert, wie Dictionaries). - Mengenoperationen: Vereinigung, Schnittmenge, Differenz, symmetrische Differenz.
Ein Set erstellen
vuoto = set() # ACHTUNG: {} ist ein leeres Dict, kein Set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3]) # {1, 2, 3}Geschweifte Klammern allein {} erstellen ein leeres Dictionary, kein Set: Für ein leeres Set
benötigst du set().
Ein Set verändern
s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
s.add(1) # keine Auswirkung (bereits vorhanden)
s.discard(99) # entfernt, falls vorhanden; andernfalls lautlos
s.remove(2) # entfernt oder löst KeyError ausMengenoperationen
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
a | b # {1, 2, 3, 4, 5, 6} Vereinigung
a & b # {3, 4} Schnittmenge
a - b # {1, 2} Differenz (in a, aber nicht in b)
a ^ b # {1, 2, 5, 6} symmetrische Differenz (xor)Es gibt auch Methodenformen (a.union(b), a.intersection(b), …), die
zudem jedes beliebige Iterable akzeptieren, nicht nur Sets.
Mitgliedschaftstest
parole = {"ciao", "mondo", "python"}
"ciao" in parole # True O(1)
"java" not in parole # TrueZum Vergleich: Die Suche mit in in einer list ist O(n) und bei langen
Listen wesentlich langsamer.
Frozen Set: Die unveränderliche Version
frozenset({1, 2, 3}) ist die hashbare Version: Sie kann als Dictionary-Schlüssel oder als
Element eines anderen Sets verwendet werden.
Mengenoperationen und Performance
Sets sind als Hash-Tabellen implementiert, was die Überprüfung der Mitgliedschaft (x in mein_set) extrem schnell macht: Sie erfolgt in konstanter Zeit O(1), im Gegensatz zu Listen, bei denen die Suche lineare Zeit O(n) beansprucht. Darüber hinaus unterstützen sie algebraische Operationen wie Vereinigung (|), Schnittmenge (&) und Differenz (-).
Probiere es aus
Gegeben sei die Liste `nums = [1, 2, 2, 3, 3, 3, 4]`. Erstelle `unique_items` mit den eindeutigen Werten (in beliebiger Reihenfolge) und berechne dann `count` als len(unique_items). Evaluiere `count`.
Hinweis anzeigen
set(nums) entfernt Duplikate.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Gegeben seien `a = {1, 2, 3, 4}` und `b = {3, 4, 5, 6}`. Berechne die Schnittmenge in `common_items` und die Differenz a-b in `only_a`. Evaluiere das Tupel `(common_items, only_a)`.
Hinweis anzeigen
& Schnittmenge, - Differenz.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Gegeben seien zwei Sets `set_a = {1, 2, 3}` und `set_b = {2, 3, 4}`. Berechne die mathematische Schnittmenge der beiden Sets (ihre gemeinsamen Elemente). Speichere das Ergebnis-Set in `common_elements` und evaluiere es.
Hinweis anzeigen
Du kannst den Operator & oder die Methode set_a.intersection(set_b) verwenden.
Lösung nach 3 Versuchen verfügbar