Set-Elemente hinzufügen
Erfahren Sie, wie Sie mit add() einzelne Elemente und mit update() mehrere Werte aus beliebigen Iterables zu einem Python-Set hinzufügen.
Python-Sets sind ungeordnete Sammlungen eindeutiger Elemente. Sobald ein Set erstellt ist, können Sie es jederzeit mit zwei dedizierten Methoden erweitern: add() zum Einfügen eines einzelnen Elements und update() zum Einfügen mehrerer Elemente auf einmal aus einem beliebigen Iterable. Dieses Kapitel behandelt beide Methoden ausführlich, erklärt, wann welche verwendet werden sollte, und weist auf häufige Fallstricke hin.
Wenn Sie neu im Umgang mit Sets sind, lesen Sie zuerst das Kapitel Python Sets. Um zu erfahren, wie Elemente entfernt werden, lesen Sie Set-Elemente entfernen.
Die Methode add()
add() fügt ein Element in das Set ein. Wenn das Element bereits vorhanden ist, wird das Set nicht verändert — es wird kein Fehler ausgelöst und kein Duplikat erstellt.
Syntax
set.add(element)element— der einzufügende Wert. Er muss hashbar sein (string, Zahlen, Tupel aus hashbaren Werten usw.). Listen und Dicts können nicht hinzugefügt werden.- Rückgabewert:
None. Das Set wird direkt verändert.
Ein neues Element hinzufügen
Einen string zu einem Set hinzufügen
Ein Duplikat hinzufügen ist sicher
Der Aufruf von add() mit einem bereits vorhandenen Element bewirkt nichts — das Set bleibt gleich groß:
Ein doppeltes Element zu einem Set hinzufügen
fruits = {'apple', 'banana', 'cherry'}
fruits.add('apple') # 'apple' is already present
print(fruits)
# {'apple', 'banana', 'cherry'} (unchanged)Dies ist eine der nützlichsten Eigenschaften von Sets: Sie müssen nie prüfen, ob ein Element vorhanden ist, bevor Sie es hinzufügen.
add() akzeptiert nur ein Argument
add() nimmt genau ein Argument entgegen. Um mehrere Elemente auf einmal einzufügen, verwenden Sie stattdessen update() (siehe nächster Abschnitt).
# This raises TypeError: set.add() takes exactly one argument (2 given)
# fruits.add('kiwi', 'mango')add() erfordert ein hashbares Element
In einem Set können nur hashbare Typen gespeichert werden. Listen und Dictionaries sind nicht hashbar, daher löst deren Übergabe an add() einen TypeError aus:
s = {1, 2, 3}
# s.add([4, 5]) # TypeError: unhashable type: 'list'
# Use a tuple instead:
s.add((4, 5))
print(s)
# {1, 2, 3, (4, 5)}Die Methode update()
update() fügt alle Elemente aus einem oder mehreren Iterables in einem einzigen Aufruf zum Set hinzu. Es akzeptiert jedes Iterable — ein weiteres Set, eine Liste, ein Tupel oder sogar einen string.
Syntax
set.update(iterable1, iterable2, ...)- Es können ein oder mehrere Iterables übergeben werden.
- Duplikate zwischen dem vorhandenen Set und den neuen Elementen werden stillschweigend ignoriert.
- Rückgabewert:
None. Das Set wird direkt verändert.
Elemente aus einer Liste hinzufügen
Ein Set aus einer Liste aktualisieren
fruits = {'apple', 'banana'}
fruits.update(['cherry', 'date', 'elderberry'])
print(fruits)
# {'apple', 'banana', 'cherry', 'date', 'elderberry'}Elemente aus einem anderen Set hinzufügen
Zwei Sets mit update() zusammenführen
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set1.update(set2)
print(set1)
# {1, 2, 3, 4, 5}Beachten Sie, dass update() set1 direkt verändert, während union() ein neues Set zurückgibt, ohne eines der Originale zu berühren.
Aus mehreren Iterables gleichzeitig hinzufügen
Sie können einem einzigen update()-Aufruf mehrere Iterables übergeben:
Ein Set aus mehreren Iterables aktualisieren
numbers = {1, 2, 3}
numbers.update([4, 5], {5, 6, 7})
print(numbers)
# {1, 2, 3, 4, 5, 6, 7}Einen string an update() übergeben
Da ein string iterierbar ist, zerlegt update() ihn in einzelne Zeichen. Das ist in der Regel nicht das gewünschte Verhalten, daher ist Vorsicht geboten:
Mit einem string aktualisieren — fügt einzelne Zeichen hinzu
s = {'hello'}
s.update('abc')
print(s)
# {'hello', 'a', 'b', 'c'} — each character becomes a separate elementUm einen ganzen string als ein Element hinzuzufügen, verwenden Sie stattdessen add().
add() vs update() — Kurzübersicht
add() | update() | |
|---|---|---|
| Anzahl der Elemente | Eines | Mehrere |
| Argumenttyp | Ein einzelner hashbarer Wert | Beliebiges Iterable (Liste, Set, Tupel, …) |
| Verändert Set direkt? | Ja | Ja |
| Rückgabewert | None | None |
Praktische Beispiele
Ein Tag-Set dynamisch aufbauen
Ein häufiger Anwendungsfall ist das Sammeln eindeutiger Tags oder Bezeichner während der Programmausführung:
Eindeutige Tags mit einem Set sammeln
tags = set()
# add() for one tag at a time
tags.add('python')
tags.add('tutorial')
tags.add('python') # duplicate — ignored
print(tags)
# {'python', 'tutorial'}
# update() to add several tags at once
tags.update(['coding', 'beginner', 'tutorial'])
print(tags)
# {'python', 'tutorial', 'coding', 'beginner'}Duplikate beim Akkumulieren von Daten entfernen
Da add() Duplikate stillschweigend ignoriert, können Sie ein Set als Akkumulator verwenden, um Elemente aus mehreren Quellen zu deduplizieren:
Elemente aus zwei Listen mithilfe eines Sets deduplizieren
batch1 = [101, 102, 103, 102]
batch2 = [103, 104, 105]
seen = set()
seen.update(batch1)
seen.update(batch2)
print(sorted(seen))
# [101, 102, 103, 104, 105]Wichtige Punkte
- Sets speichern nur eindeutige Elemente;
add()undupdate()erstellen niemals Duplikate. - Sets sind ungeordnet — die Einfügereihenfolge wird nicht beibehalten und kann zwischen Programmläufen variieren.
add()fügt genau ein hashbares Element ein;update()fügt alle Elemente aus einer beliebigen Anzahl von Iterables ein.- Beide Methoden geben
Nonezurück und verändern das Set direkt. - Um zwei Sets zu einem neuen Set zu kombinieren, ohne eines der beiden zu verändern, verwenden Sie
union()(siehe Set-Methoden).