Tuples in Python aktualisieren
Alle Techniken zum Aktualisieren von Python-Tuples: Listenkonvertierung, Verkettung, Slicing, Werte ersetzen, Elemente hinzufügen und entfernen.
Python-Tuples sind unveränderliche Sequenzen — einmal erstellt, kann ihre Struktur nicht mehr verändert werden. Elemente können nicht direkt hinzugefügt, entfernt oder neu zugewiesen werden. Dennoch lässt sich aus einem bestehenden Tuple stets ein neues, verändertes Tuple erzeugen. Diese Seite erklärt alle praktischen Techniken: Konvertierung in eine Liste, Verkettung, Slicing, Ersetzen aller Vorkommen eines Werts und mehr. Außerdem wird die eine wichtige Besonderheit erläutert — veränderliche Objekte, die innerhalb eines Tuples verschachtelt sind.
Warum Tuples unveränderlich sind
Die Unveränderlichkeitsgarantie von Python ist beabsichtigt. Tuples können genau deshalb als Dictionary-Schlüssel oder Mitglieder von Sets verwendet werden, weil sich ihre Identität niemals ändert. Der Versuch, ein Tuple direkt zu ändern, löst einen TypeError aus:
Der Versuch einer direkten Zuweisung löst TypeError aus
t = (1, 2, 3, 4, 5)
t[2] = 6 # TypeError: 'tuple' object does not support item assignmentAlle nachfolgenden Techniken erstellen ein brandneues Tuple, anstatt das ursprüngliche zu verändern.
Konvertierung in eine Liste
Der lesbarste Ansatz für komplexe Änderungen: in eine Liste konvertieren, alle Bearbeitungen vornehmen und dann zurück konvertieren.
Ein Tuple in eine Liste konvertieren, aktualisieren und zurückkonvertieren
Ausgabe:
(1, 2, 6, 4, 5)Verwende diesen Ansatz, wenn du mehrere Änderungen auf einmal vornehmen musst — zum Beispiel Sortieren, Filtern oder eine Transformation auf alle Elemente anwenden — da Listen alle Mutationsoperationen unterstützen.
Einen Wert durch Slicing und Verkettung ersetzen
Um ein einzelnes Element auszutauschen, kannst du das Tuple um den Zielindex herum aufteilen und den neuen Wert verketten. Keine Listenkonvertierung erforderlich.
Ein Element durch Slice + Verkettung ersetzen
t = (1, 2, 3, 4, 5)
# Replace the element at index 2 (value 3) with 6
t = t[:2] + (6,) + t[3:]
print(t)Ausgabe:
(1, 2, 6, 4, 5)Der Slice t[:2] ergibt (1, 2), das Literal (6,) ist der Ersatz (beachte das abschließende Komma — es macht es zu einem Tuple), und t[3:] ergibt (4, 5). Die Verkettung fügt alle drei zu einem neuen Tuple zusammen.
Alle Vorkommen eines Werts ersetzen
Verwende einen Generator-Ausdruck innerhalb von tuple(), um jedes Vorkommen eines Werts durch einen anderen zu ersetzen.
Alle Vorkommen eines Werts in einem Tuple ersetzen
t = (1, 2, 2, 3, 2)
# Replace every 2 with 5
t = tuple(5 if x == 2 else x for x in t)
print(t)Ausgabe:
(1, 5, 5, 3, 5)Dies ist kompakter als der Listenkonvertierungsansatz, wenn das einzige Ziel eine Wertersetzung ist.
Elemente hinzufügen
Am Ende anfügen
Verwende den +-Operator, um Elemente anzufügen. Die rechte Seite muss ebenfalls ein Tuple sein — daher das abschließende Komma in (4,).
Ein Element an ein Tuple anfügen
t = (1, 2, 3)
t = t + (4,)
print(t)Ausgabe:
(1, 2, 3, 4)Die erweiterte Zuweisungsschreibweise += funktioniert auf dieselbe Weise:
+= verwenden, um ein Tuple zu erweitern
t = (1, 2, 3)
t += (4, 5)
print(t)Ausgabe:
(1, 2, 3, 4, 5)Hinweis: += verändert das ursprüngliche Tuple-Objekt nicht — Python bindet den Variablennamen an ein neu erstelltes Tuple. Wenn eine andere Variable noch auf das Original verweist, bleibt dieses unverändert.
Am Anfang voranstellen
Ein Element einem Tuple voranstellen
t = (1, 2, 3)
t = (0,) + t
print(t)Ausgabe:
(0, 1, 2, 3)In der Mitte einfügen
Es gibt keine direkte insert()-Methode für Tuples. Kombiniere zwei Slices um die gewünschte Position:
Ein Element an einer bestimmten Position einfügen
t = (1, 2, 4, 5)
# Insert 3 at index 2
t = t[:2] + (3,) + t[2:]
print(t)Ausgabe:
(1, 2, 3, 4, 5)Elemente entfernen
Nach Index entfernen
Schneide um den Index, den du entfernen möchtest, herum:
Das Element an Index 2 entfernen
t = (1, 2, 3, 4, 5)
# Remove the element at index 2 (value 3)
t = t[:2] + t[3:]
print(t)Ausgabe:
(1, 2, 4, 5)Nach Wert entfernen
Verwende einen Generator-Ausdruck, um übereinstimmende Werte herauszufiltern:
Alle Vorkommen eines bestimmten Werts entfernen
t = ('apple', 'banana', 'cherry', 'banana')
t = tuple(x for x in t if x != 'banana')
print(t)Ausgabe:
('apple', 'cherry')Damit werden alle Vorkommen des Werts in einem Durchlauf entfernt. Wenn du nur das erste Vorkommen entfernen möchtest, konvertiere in eine Liste, rufe .remove() auf und konvertiere zurück.
Tuple-Entpacken verwenden
Das Entpacken eines Tuples in benannte Variablen ermöglicht es, es mit geänderten Positionen neu aufzubauen. Dies ist am nützlichsten, wenn das Tuple klein ist und du die Bestandteile zur besseren Übersichtlichkeit umbenennen möchtest.
Ein Tuple durch Entpacken und Neuzuweisung bestimmter Variablen neu aufbauen
t = (1, 2, 3, 4, 5)
a, b, c, d, e = t
# Replace the third element
t = (a, b, 6, d, e)
print(t)Ausgabe:
(1, 2, 6, 4, 5)Vermeide diesen Ansatz bei großen Tuples — du musst eine Variable pro Element schreiben, was ausführlich und fehleranfällig ist.
Besonderheit: Veränderliche Objekte innerhalb eines Tuples
Die Unveränderlichkeit eines Tuples gilt nur für die Referenzen, die es enthält, nicht für die Objekte, auf die diese Referenzen zeigen. Wenn ein Tuple ein veränderliches Objekt enthält — beispielsweise eine Liste — kannst du die Liste ändern, und die Änderung ist über das Tuple sichtbar.
Eine Liste innerhalb eines Tuples ändern
t = ([1, 2], [3, 4])
# The tuple itself is immutable, but its elements (lists) are not
t[0].append(5)
print(t)Ausgabe:
([1, 2, 5], [3, 4])Das Tuple enthält noch immer dieselben zwei Listen-Referenzen — das ist unveränderlich. Aber das Listen-Objekt, auf das t[0] zeigt, wurde verändert. Dies ist eine häufige Quelle der Verwirrung, wenn Tuples als Dictionary-Schlüssel verwendet werden; nur vollständig unveränderliche Tuples (die keine Listen, Dicts oder andere veränderliche Objekte enthalten) sind hashbar.
Den richtigen Ansatz wählen
| Ziel | Empfohlene Technik |
|---|---|
| Ein Element nach Index ändern | Slicing + Verkettung |
| Alle Vorkommen eines Werts ersetzen | Generator-Ausdruck innerhalb von tuple() |
| Mehrere Änderungen auf einmal | In Liste konvertieren, bearbeiten, zurückkonvertieren |
| Elemente am Ende hinzufügen | Operator + oder += |
| Ein Element nach Index entfernen | Um den Index herum schneiden |
| Ein Element nach Wert entfernen | Generator-Ausdruck mit if-Bedingung |
| Kleines, positionell klares Tuple | In benannte Variablen entpacken und neu aufbauen |
Weitere Informationen zur Arbeit mit Tuples findest du unter Access Tuples, Unpack Tuples, Loop Tuples und Tuple Methods.