Python Set-Methoden – Vollständige Referenz mit Beispielen
Vollständige Übersicht der Python Set-Methoden: union, intersection, difference, update, add, remove, discard, copy, isdisjoint und mehr mit Beispielen.
Python-Sets sind ungeordnete Sammlungen eindeutiger, hashfähiger Elemente. Da Sets das mathematische Konzept einer Menge implementieren, verfügen sie über eine umfangreiche Sammlung eingebauter Methoden zum Kombinieren, Vergleichen und Modifizieren. Dieses Kapitel behandelt jede eingebaute Set-Methode mit klaren Beispielen, erwarteter Ausgabe und Hinweisen, wann welche Methode zu bevorzugen ist.
Wenn Sie neu bei Sets sind, lesen Sie zuerst Python Sets, um zu verstehen, wie Sets erstellt werden und warum sie sich von Listen und Tupeln unterscheiden.
Sets erstellen
Verwenden Sie geschweifte Klammern {} oder den Konstruktor set(), um ein Set zu erstellen. Der Konstruktor akzeptiert auch jedes Iterable — eine Liste, ein Tupel oder einen string — und entfernt automatisch Duplikate.
fruits = {'apple', 'banana', 'cherry'}
colors = set(['red', 'green', 'blue']) # from a list
vowels = set('aeiou') # from a string → {'a', 'e', 'i', 'o', 'u'}
empty = set() # NOT {} — that creates an empty dictSets sind ungeordnet: die angezeigte Reihenfolge der Elemente kann zwischen Ausführungen und Python-Versionen variieren.
Set-Operationsmethoden
Diese Methoden kombinieren oder vergleichen zwei oder mehr Sets, ohne die Originale zu verändern.
union()
union(*others) gibt ein neues Set zurück, das jedes Element enthält, das im aktuellen Set oder in einem der others vorkommt.
Der Operator | ist die entsprechende Kurzform für zwei Sets: A | B.
Wann verwenden: Mehrere Sammlungen zusammenführen und dabei Duplikate in einem einzigen Schritt entfernen.
intersection()
intersection(*others) gibt ein neues Set zurück, das nur die Elemente enthält, die im aktuellen Set und in jedem der others vorkommen.
Der Operator & ist die Kurzform für zwei Sets: A & B.
Wann verwenden: Gemeinsame Elemente finden — zum Beispiel Benutzer, die sowohl auf Anzeige A als auch auf Anzeige B geklickt haben.
difference()
difference(*others) gibt ein neues Set mit Elementen zurück, die im aktuellen Set vorhanden sind, aber nicht in einem der others.
Der Operator - ist die Kurzform: A - B.
Wann verwenden: Eine Gruppe aus einer anderen herausfiltern — zum Beispiel Produkte finden, die auf Lager, aber noch nicht versandt sind.
symmetric_difference()
symmetric_difference(other) gibt ein neues Set mit Elementen zurück, die in genau einem der beiden Sets vorkommen — also die Elemente, die nicht gemeinsam sind.
Der Operator ^ ist die Kurzform: A ^ B.
Wann verwenden: Änderungen zwischen zwei Momentaufnahmen erkennen — zum Beispiel Dateien, die zwischen zwei Verzeichnisauflistungen hinzugefügt oder gelöscht wurden.
issubset()
issubset(other) gibt True zurück, wenn jedes Element des aktuellen Sets auch in other enthalten ist.
Der Operator <= ist gleichwertig; verwenden Sie <, um eine echte Teilmenge zu prüfen (A ist kleiner als B und vollständig enthalten).
issuperset()
issuperset(other) gibt True zurück, wenn das aktuelle Set jedes Element von other enthält.
A = {1, 2, 3, 4, 5}
B = {2, 3}
print(A.issuperset(B)) # True
print(B.issuperset(A)) # FalseDer Operator >= ist gleichwertig; verwenden Sie >, um eine echte Obermenge zu prüfen.
isdisjoint()
isdisjoint(other) gibt True zurück, wenn die beiden Sets keine gemeinsamen Elemente haben — ihre Schnittmenge ist leer.
A = {1, 2, 3}
B = {4, 5, 6}
C = {3, 4, 5}
print(A.isdisjoint(B)) # True — no overlap
print(A.isdisjoint(C)) # False — 3 is in bothWann verwenden: Nicht überlappende Kategorien validieren, prüfen, ob zwei Berechtigungs-Sets sich gegenseitig ausschließen.
In-place-Aktualisierungsmethoden
Diese Methoden verändern das Set in place und geben None zurück — sie erstellen kein neues Set.
update()
update(*others) fügt alle Elemente aus einem oder mehreren Iterables in das aktuelle Set ein und ignoriert dabei Duplikate.
update() akzeptiert jedes Iterable, nicht nur ein anderes Set — auch eine Liste, ein Tupel oder ein string funktioniert. Der Operator |= ist die Kurzform für zwei Sets.
intersection_update()
intersection_update(*others) behält nur die Elemente, die auch in jedem der others vorhanden sind, und verwirft alles andere.
A = {1, 2, 3, 4}
B = {2, 3, 4, 5}
A.intersection_update(B)
print(A) # {2, 3, 4}Der Operator &= ist die Kurzform.
difference_update()
difference_update(*others) entfernt aus dem aktuellen Set jedes Element, das in einem der others vorkommt.
A = {1, 2, 3, 4}
B = {3, 4, 5}
A.difference_update(B)
print(A) # {1, 2}Der Operator -= ist die Kurzform.
symmetric_difference_update()
symmetric_difference_update(other) behält nur die Elemente, die in genau einem der beiden Sets vorkommen, und aktualisiert das Set in place.
A = {1, 2, 3}
B = {2, 3, 4}
A.symmetric_difference_update(B)
print(A) # {1, 4}Der Operator ^= ist die Kurzform.
Methoden zur Elementmanipulation
add()
add(elem) fügt elem in das Set ein. Wenn elem bereits vorhanden ist, bleibt das Set unverändert.
Weitere Möglichkeiten, ein Set zu befüllen, finden Sie unter Adding Set Items.
remove()
remove(elem) entfernt elem aus dem Set. Wirft einen KeyError, wenn elem nicht vorhanden ist.
Verwenden Sie remove(), wenn das Element zwingend im Set vorhanden sein muss und ein unerwartetes Fehlen ein Programmierfehler ist, der sichtbar gemacht werden soll.
discard()
discard(elem) entfernt elem aus dem Set. Wirft keinen Fehler, wenn elem nicht vorhanden ist.
Verwenden Sie discard(), wenn das Element im Set vorhanden sein kann oder nicht, und Sie es einfach entfernen möchten.
pop()
pop() entfernt und gibt ein beliebiges Element zurück. Da Sets ungeordnet sind, lässt sich nicht vorhersagen, welches Element entfernt wird. Wirft einen KeyError, wenn das Set leer ist.
Einen Vergleich aller Entfernungsansätze finden Sie unter Removing Set Items.
clear()
clear() entfernt jedes Element und hinterlässt ein leeres Set.
Beachten Sie, dass print(set()) set() ausgibt, nicht {}, um ein leeres Set von einem leeren dict zu unterscheiden.
copy()
copy() gibt eine flache Kopie des Sets zurück. Das Ändern der Kopie hat keinen Einfluss auf das Original.
A = {1, 2, 3}
B = A.copy()
B.add(4)
print(A) # {1, 2, 3} — unchanged
print(B) # {1, 2, 3, 4}Dies ist wichtig, weil eine einfache Zuweisung (B = A) eine zweite Referenz auf das gleiche Set erstellt — Änderungen an B würden auch A betreffen.
Methode vs. Operator: Was ist zu bevorzugen?
Die meisten Set-Operationen haben sowohl eine Methoden- als auch eine Operatorform:
| Operation | Methode | Operator |
|---|---|---|
| Union | A.union(B) | A | B |
| Intersection | A.intersection(B) | A & B |
| Difference | A.difference(B) | A - B |
| Symmetric difference | A.symmetric_difference(B) | A ^ B |
| In-place union | A.update(B) | A |= B |
| In-place intersection | A.intersection_update(B) | A &= B |
| In-place difference | A.difference_update(B) | A -= B |
| In-place symmetric diff | A.symmetric_difference_update(B) | A ^= B |
| Subset | A.issubset(B) | A <= B |
| Superset | A.issuperset(B) | A >= B |
Wesentlicher Unterschied: Die Methoden akzeptieren jedes Iterable als Argument, während die Operatoren erfordern, dass beide Seiten Sets sind. Verwenden Sie Methoden, wenn Sie direkt auf einer Liste oder einem Tupel arbeiten möchten, ohne es vorher zu konvertieren:
tags = {'python', 'web'}
new_tags = ['python', 'ml', 'data']
tags.update(new_tags) # works — list is fine
# tags |= new_tags # TypeError — operator needs a set
print(tags) # {'python', 'web', 'ml', 'data'}Vollständige Referenz der Set-Methoden
| Methode | Beschreibung |
|---|---|
add(elem) | Fügt elem zum Set hinzu; keine Wirkung, wenn bereits vorhanden. |
clear() | Entfernt alle Elemente und hinterlässt ein leeres Set. |
copy() | Gibt eine flache Kopie des Sets zurück. |
difference(*others) | Gibt ein neues Set mit Elementen zurück, die in keinem der others enthalten sind. |
difference_update(*others) | Entfernt alle in others gefundenen Elemente aus dem Set. |
discard(elem) | Entfernt elem, wenn vorhanden; kein Fehler, wenn nicht vorhanden. |
intersection(*others) | Gibt ein neues Set mit Elementen zurück, die im Set und in allen others vorkommen. |
intersection_update(*others) | Behält nur Elemente, die im Set und in allen others vorkommen. |
isdisjoint(other) | Gibt True zurück, wenn das Set und other keine gemeinsamen Elemente haben. |
issubset(other) | Gibt True zurück, wenn jedes Element des Sets in other enthalten ist. |
issuperset(other) | Gibt True zurück, wenn das Set jedes Element von other enthält. |
pop() | Entfernt und gibt ein beliebiges Element zurück; wirft KeyError, wenn leer. |
remove(elem) | Entfernt elem; wirft KeyError, wenn nicht vorhanden. |
symmetric_difference(other) | Gibt Elemente zurück, die in genau einem der beiden Sets vorkommen. |
symmetric_difference_update(other) | Aktualisiert das Set zur symmetrischen Differenz in place. |
union(*others) | Gibt ein neues Set mit allen Elementen aus dem Set und allen others zurück. |
update(*others) | Fügt alle Elemente aus others zum Set hinzu. |