HOWTO · Python
Wie man zwei Sets in Python verbindet
Dieser Tutorial-Artikel stellt vor, wie man zwei Sets in Python zusammenfügen kann.
Auf dieser Seite
Python-Sets speichern eindeutige Elemente. Zwei Sets zu verbinden bedeutet daher, ihre Vereinigungsmenge zu bilden: eine Sammlung, die jedes Element aus beiden Sets enthält und Duplikate zu einem einzigen Vorkommen zusammenfasst. Dafür stehen der Operator |, die Methode union() und die In-place-Formen update() und |= zur Verfügung – je nachdem, ob du ein neues Set erzeugen oder ein bestehendes verändern möchtest.
Sets mit dem Vereinigungsoperator (|) verbinden
Der Vereinigungsoperator | nimmt zwei Sets entgegen und gibt ein neues Set zurück, das jedes Element enthält, das in einem der beiden vorkommt. Die ursprünglichen Sets bleiben dabei unverändert.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
result_set = set1 | set2
print(result_set)
print(set1)
print(set2)
Ausgabe:
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4}
{3, 4, 5, 6}
Die gemeinsamen Werte 3 und 4 erscheinen in result_set nur einmal, und set1 und set2 behalten ihre ursprünglichen Elemente. Beide Operanden von | müssen set-ähnlich sein (set oder frozenset); das Verbinden eines Sets mit einer Liste über | löst einen TypeError aus. Wandle die Liste daher zuerst mit set() um. Die Bezeichner im Beispielcode bleiben bewusst auf Englisch.
Elemente mit update() oder |= direkt in einem Set hinzufügen
Wenn ein bestehendes Set die Elemente einer anderen Sammlung aufnehmen soll, statt ein neues Set zu erzeugen, verwende die Methode update() oder die erweiterte Zuweisung |=. Beide verändern das Set auf der linken Seite, statt ein neues zurückzugeben.
Die beiden unterscheiden sich darin, was sie akzeptieren: update() nimmt jedes Iterable entgegen – ein Set, eine Liste, ein Tupel oder einen String –, während |= einen set-ähnlichen rechten Operanden verlangt und damit denselben Einschränkungen wie | unterliegt.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
numbers = {1, 2, 3}
numbers.update([3, 4, 5])
print(numbers)
numbers |= {6, 7}
print(numbers)
Ausgabe:
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 6, 7}
Der Aufruf update() fügt die neuen Werte der Liste direkt zu numbers hinzu, und |= fügt anschließend die Elemente des zweiten Sets demselben Objekt hinzu. Verwende diese Formen nur, wenn die Veränderung des Sets beabsichtigt ist, denn jede andere Referenz auf dieses Set sieht die Änderung ebenfalls.
union() verwenden, um mehrere Sets oder Iterables zu verbinden
Die Methode union() ist das methodische Gegenstück zu |. Sie gibt ein neues Set zurück und lässt ihre Eingaben unverändert, akzeptiert aber im Gegensatz zum Operator beliebig viele Argumente – und jedes Argument kann ein beliebiges Iterable sein statt nur ein Set.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
result_set = set1.union(set2, {7, 8}, [9, 10])
print(result_set)
print(set1)
Ausgabe:
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{1, 2, 3, 4}
Hier vereinigt union() ein Set, ein Set-Literal und eine Liste in einem einzigen Aufruf, während set1 selbst seine ursprünglichen Elemente behält. Wenn jeder Operand bereits ein Set ist, liefert a.union(b) dasselbe Ergebnis wie a | b.
Die passende Operation wählen, je nachdem, ob du ein neues Set brauchst
Wähle die Form anhand des gewünschten Ergebnisses:
- Du brauchst ein neues Set und möchtest die Originale unverändert lassen: Verwende
|, wenn beide Operanden Sets sind, oderunion(), wenn ein Operand eine Liste oder ein anderes Iterable ist oder wenn du drei oder mehr Sammlungen verbindest. - Du möchtest ein bestehendes Set verändern: Verwende
update()für jedes Iterable oder|=für Set-Operanden. - Du liest bestehenden Code:
a.union(b)unda | bbedeuten für Sets dasselbe, unda.update(b)unda |= bsind ihre In-place-Entsprechungen.
In den meisten Fällen ist result = set1 | set2 die direkte Antwort auf das Verbinden zweier Sets. Greife zu union(), wenn die Operanden möglicherweise keine Sets sind, und zu update() oder |= nur, wenn eine Änderung an Ort und Stelle das Ziel ist.