Ein Set ist ein ungeordneter Beutel eindeutiger Elemente
Wo Listen und Tupel sich für Ordnung interessieren, tun Sets es nicht. Wo Listen Duplikate stapeln lassen, verwerfen Sets sie stillschweigend. Das Set ist die richtige Datenstruktur, wenn du zwei konkrete Bedürfnisse hast:
- Du willst eindeutige Elemente, Punkt.
- Du willst schnell auf Mitgliedschaft prüfen.
Schreib eins mit geschweiften Klammern:
Die Duplikate "red" und "green" im zweiten Set verschwinden einfach. Das ist kein Fehler — das ist der ganze Witz.
Sets erzeugen
Die zwei Wege, die du tatsächlich benutzt:
Der letzte Punkt erwischt jeden einmal: {} erzeugt ein leeres Dictionary, kein leeres Set. Die syntaktische Doppeldeutigkeit musste bei einem der beiden landen, und Dicts haben gewonnen.
Hinzufügen und Entfernen
remove vs. discard ist der zentrale Unterschied: remove besteht darauf, dass das Element vorhanden ist; discard ist das egal. Wähl, je nachdem, ob Abwesenheit ein Fehler sein soll.
Schnelle Mitgliedschaft
Hier verdienen Sets sich ihren Platz wirklich. x in some_set läuft in konstanter Zeit, egal wie groß das Set ist. x in some_list muss die Liste durchlaufen, was bei großen Listen langsam wird.
Faustregel: wann immer du if x in some_list innerhalb einer Schleife schreibst und die Liste mehr als ein paar Dutzend Elemente hat, wandle sie vorher in ein Set um.
Set-Mathematik
Hier werden Sets wirklich unterhaltsam. Du kannst sie mit Operatoren kombinieren, die mathematischen Mengenoperationen entsprechen:
Jeder Operator hat auch eine Methodenform (.union(), .intersection(), .difference(), .symmetric_difference()). Die Operatoren sind kompakter; die Methoden akzeptieren jede Iterable, nicht nur ein anderes Set.
Eine Liste deduplizieren
Einer der häufigsten Set-Einsätze, auch außerhalb von „Set-Logik“:
Eine Zeile, Duplikate weg. Ein Punkt dazu: die Reihenfolge ist nicht erhalten. Brauchst du Eindeutigkeit und die Originalreihenfolge, nimm stattdessen dict.fromkeys():
Dicts behalten in modernem Python die Einfügereihenfolge, und dict.fromkeys baut eins, das die Iterable-Elemente als Schlüssel nutzt — praktisch ein geordnetes Set.
Teilmengen und Obermengen
Prüfen, ob ein Set in einem anderen enthalten ist:
Das kommt bei Dingen wie Berechtigungsprüfungen vor („hat dieser Nutzer alle erforderlichen Rollen?“).
Was in ein Set darf
Nur hashbare Elemente. Das ist ein Fachbegriff — in der Praxis heißt es:
- Unveränderliche Dinge sind hashbar: Zahlen, Strings, Tupel aus Hashbarem, frozensets.
- Veränderbare Dinge nicht: Listen, Dicts, andere Sets können keine Set-Elemente sein.
Brauchst du ein Set von Sets, nimm frozenset — eine unveränderliche Set-Variante.
Iteration ist ungeordnet
Eine Schleife über ein Set liefert Elemente in keiner garantierten Reihenfolge:
Führ das ein paar Mal aus, und die Reihenfolge variiert. Zählt die Reihenfolge, ist ein Set nicht die richtige Struktur — sortier den Inhalt, wenn nötig, oder nimm eine Liste.
Wann du kein Set nutzen solltest
Trifft eines davon zu, ist eine Liste oder ein Dict vermutlich passender:
- Die Reihenfolge ist wichtig.
- Du willst Duplikate speichern.
- Jedes Element hat zugehörige Daten (nimm ein Dict mit dem Element als Schlüssel).
Weiter
Sets erledigen Eindeutigkeit und Mitgliedschaft. Dictionaries — als Nächstes — erledigen das breitere Muster „Wert per Schlüssel nachschlagen“, vermutlich die nützlichste Nicht-Listen-Datenstruktur in Python.
Häufig gestellte Fragen
Was ist ein Python-Set?
Ein Set ist eine ungeordnete Sammlung eindeutiger Elemente. Sets nutzen geschweifte Klammern ohne Schlüssel-Wert-Paare: colors = {'red', 'green', 'blue'}. Denselben Wert zweimal hinzuzufügen hat keinen Effekt — Duplikate werden stillschweigend verworfen.
Wann soll ich ein Set statt einer Liste nutzen?
Nimm ein Set, wenn dir Eindeutigkeit wichtig ist oder wenn du viele Mitgliedsprüfungen (x in collection) machst. Sets entfernen Duplikate automatisch und prüfen Mitgliedschaft in konstanter Zeit, was bei großen Sammlungen ein riesiger Tempogewinn gegenüber Listen ist.
Wie erzeuge ich ein leeres Set in Python?
Nimm set(), nicht {} — geschweifte Klammern ohne Inhalt erzeugen ein leeres Dictionary, kein leeres Set. Sobald du ein Set hast, fügst du mit .add(value) Elemente hinzu.