Menu

Python-Sets: eindeutige Elemente, Vereinigung, Schnittmenge und Differenz

Wann du zu einem Python-Set greifst — Eindeutigkeit, schnelle in-Prüfungen und die mathematischen Operationen (Vereinigung, Schnittmenge, Differenz), die Sets stark machen.

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:

  1. Du willst eindeutige Elemente, Punkt.
  2. Du willst schnell auf Mitgliedschaft prüfen.

Schreib eins mit geschweiften Klammern:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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

main.py
Output
Click Run to see the output here.

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.

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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“:

main.py
Output
Click Run to see the output here.

Eine Zeile, Duplikate weg. Ein Punkt dazu: die Reihenfolge ist nicht erhalten. Brauchst du Eindeutigkeit und die Originalreihenfolge, nimm stattdessen dict.fromkeys():

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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.
main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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.

Lerne mit Coddy zu programmieren

LOS GEHT'S