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.

Diese Seite enthält ausführbare Editoren — bearbeiten, ausführen und Ausgabe sofort sehen.

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:

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.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S