Sets¶
Sets in Python sind eine ungeordnete Sammlung von Objekten, die in Situationen
verwendet werden, in denen die Zugehörigkeit und Einzigartigkeit zur Menge die
wichtigsten Informationen des Objekts sind. Der in
-Operator läuft bei Sets
schneller als bei Listen:
set
¶
Sets erstellen¶
Ihr könnt Sets erstellen, indem ihr set
auf eine Sequenz anwendet,
z.B. auf eine Liste.
>>> sequences = set(["list", "tuple", "tuple"])
>>> sequences
{'tuple', 'list'}
Wenn eine Sequenz zu einem Set gemacht wird, werden Duplikate entfernt, allerdings geht dann auch die Reihenfolge verloren.
Auch können einzelne Elemente nicht mit Slicing ausgewählt werden:
>>> sequences[0]
Traceback (most recent call last):
File "<python-input-27>", line 1, in <module>
sequences[0]
~~~~~~~~~^^^
TypeError: 'set' object is not subscriptable
Werte überprüfen¶
Das Schlüsselwort in
wird verwendet, um die Zugehörigkeit eines Objekts zu
einer Menge zu prüfen.
>>> "list" in sequences
True
>>> "set" in sequences
False
Werte hinzufügen und löschen¶
Mit add
und remove
könnt ihr Werte hinzufügen und löschen.
>>> quantities = sequences.add("set")
>>> quantities
{'list', 'tuple', 'set'}
>>> quantities.remove("set")
>>> quantities
{'list', 'tuple'}
Die Elemente sind ungeordnet, d.h. die Werte innerhalb einer Sequenz können sich verschieben, wenn neue Elemente hinzugefügt werden.
Mengenbildung¶
- Vereinigungsmenge
x = {4, 2, 3, 2, 1} y = {3, 4, 5} >>> x.union(y) {0, 1, 2, 3, 4, 5}
- Schnittmenge
>>> x.intersection(y) {3}
- Differenz- oder Restmenge
>>> x.difference(y) {0, 1, 2}
frozenset
¶
Neben set
gibt es noch frozenset
, einen unveränderlichen Datentyp. Damit können sie auch Mitglieder anderer Mengen
sein:
1>>> sequences = frozenset(["list", "tuple", "set", "tuple"])
2>>> sequences
3frozenset({'list', 'tuple', 'set'})
4>>> dicts = {"dict"}
5>>> sequences.add(dicts)
6Traceback (most recent call last):
7 File "<python-input-18>", line 1, in <module>
8 sequences.add(dicts)
9 ^^^^^^^^^^^^^
10AttributeError: 'frozenset' object has no attribute 'add'
11>>> dicts.add(sequences)
12>>> dicts
13{frozenset({'list', 'tuple', 'set'}), 'dict'}
Performance¶
Sets sind sehr schnell bei der Überprüfung, ob Elemente in einer Menge enthalten sind. Auch zum Auffinden von gemeinsamen und eindeutigen Werten zweier Mengen ist die mengenarithmetik von Sets gut geeignet. Hierfür kann es sinnvoll sein, Listen oder Tupel in Sets umzuwandeln.
Reihenfolge¶
Der Geschwindigkeitsvorteil hat jedoch auch ihren Preis: Sets halten die Elemente nicht in der richtigen Reihenfolge, während Listen und Tupel dies tun. Wenn die Reihenfolge für euch wichtig ist, solltet ihr nur für bestimmte Operationen die Elemente in ein Set umwandeln, z.B. um zu überprüfen, ob die Elemente einer Liste eindeutig sind mit
>>> sequences = ["list", "tuple", "set", "tuple"]
>>> len(sequences) == len(set(sequences))
False
Checks¶
Wieviele Elemente hat ein Set, wenn es aus der folgenden Liste
[4, 2, 3, 2, 1]
gebildet wird?