HOWTO · Python
Tauschen Sie Elemente einer Liste in Python aus
Dieses Tutorial zeigt, wie Sie die Elemente einer Liste in Python austauschen.
Auf dieser Seite
Beim Vertauschen von Elementen in einer Python-Liste ändern sich die Werte an den jeweiligen Positionen. Mit Tuple-Unpacking lässt sich ein Wertepaar knapp austauschen. Eine temporäre Variable macht jeden Zuweisungsschritt sichtbar, während pop() zusammen mit insert() Werte in der Liste verschiebt. Eine Slice-Zuweisung eignet sich, wenn ein Bereich umgekehrt werden soll, statt nur zwei Positionen zu vertauschen.
Listenelemente mit Tuple-Unpacking vertauschen
Beim Tuple-Unpacking wertet Python zuerst die Werte auf der rechten Seite aus und weist sie anschließend den indizierten Zielen auf der linken Seite zu. Dadurch erhält jedes Ziel den ursprünglichen Wert der jeweils anderen Position, ohne dass eine separate Variable zum Zwischenspeichern nötig ist. Python nummeriert Listen ab null; das erste Element steht daher am Index 0.
Für zwei bekannte Positionen verwenden Sie diese direkte Schreibweise. Führen Sie das Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
items = ["red", "blue", "green", "gold"]
items[1], items[3] = items[3], items[1]
print(items)
['red', 'gold', 'green', 'blue']
Damit werden das zweite und das vierte Element direkt in der Liste vertauscht. Die Liste behält ihre Länge, und Elemente außerhalb dieser Indizes bleiben an ihren ursprünglichen Positionen.
Für mehrere voneinander unabhängige Paare können Sie die Indexpaare in einem iterierbaren Objekt sammeln und dieselbe Zuweisung auf jedes Paar anwenden:
items = [6, 2, 7, 8, 5, 9, 10, 3]
for left, right in [(0, 3), (4, 6)]:
items[left], items[right] = items[right], items[left]
print(items)
[8, 2, 7, 6, 10, 9, 5, 3]
Bei jedem Schleifendurchlauf wird ein Paar anhand der aktuellen Listenwerte vertauscht. Wählen Sie Paare, deren Indizes auf die gewünschten Positionen verweisen. Überschneiden sich die Paare, kann ein früherer Tausch beeinflussen, welche Werte ein späterer Durchlauf vorfindet.
Elemente mit einer temporären Variable vertauschen
Eine temporäre Variable macht die drei Zuweisungen sichtbar, mit denen ein Tausch funktioniert. Speichern Sie zuerst einen Wert, überschreiben Sie dann dessen Listenposition mit dem anderen Wert und schreiben Sie schließlich den gespeicherten Wert an die zweite Position. Das ist hilfreich, wenn die einzelnen Schritte die umgebende Logik verständlicher machen.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
items = [6, 2, 7, 8]
temp = items[1]
items[1] = items[3]
items[3] = temp
print(items)
Die temporäre Variable muss den ursprünglichen Wert speichern, bevor seine Listenposition überschrieben wird. Für ein einfaches Wertepaar ist Tuple-Unpacking kürzer; beide Ansätze ändern die bestehende Liste.
Elemente mit pop() und insert() vertauschen
pop() ist eine Listenmethode, die ein Element entfernt und dessen Wert zurückgibt. Beim Entfernen rücken nachfolgende Elemente um eine Position nach links, sodass Indizes danach auf andere Werte verweisen können. insert() ist eine weitere Listenmethode: Sie fügt einen Wert vor der angegebenen Position ein und verschiebt nachfolgende Elemente nach rechts.
Um die Werte zu vertauschen, die ursprünglich an den Indizes 1 und 3 standen, entfernen Sie zuerst das Element am niedrigeren Index. Dadurch rückt der ursprünglich an Index 3 stehende Wert auf Index 2:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
items = [6, 2, 7, 8]
first = items.pop(1)
second = items.pop(2)
items.insert(1, second)
items.insert(3, first)
print(items)
Beim zweiten Aufruf von pop() wird Index 2 verwendet, weil das erste Entfernen die verbleibenden Elemente verschoben hat. Nachdem beide Werte entfernt wurden, stellen Sie mit den gespeicherten Werten an den Positionen 1 und 3 die ursprüngliche Listenlänge wieder her und tauschen das Paar aus. Dieser Ansatz erfordert mehr Schritte als eine direkte Zuweisung und ist vor allem dann sinnvoll, wenn das Entfernen und Wiedereinfügen ohnehin zum Ablauf gehört.
Einen Bereich durch Umkehren eines Slices vertauschen
Ein Slice wählt mit start:stop:step einen Bereich aus. Der Startindex ist enthalten, der Stopindex ausgeschlossen; ein negativer Schritt durchläuft die ausgewählten Werte in umgekehrter Reihenfolge. Bei einer Slice-Zuweisung wird der ausgewählte Teil einer Liste durch eine andere Sequenz ersetzt.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
items = [6, 2, 7, 8]
items[1:4] = items[1:4][::-1]
print(items)
Der ausgewählte Bereich umfasst hier die Indizes 1, 2 und 3; durch die Zuweisung werden also alle drei Werte umgekehrt. Es werden nicht nur die Endpunkte vertauscht. Wenn Sie durch Umkehren eines Bereichs genau zwei benachbarte Werte vertauschen möchten, wählen Sie einen Bereich mit zwei Elementen. Für zwei beliebige Indizes ist Tuple-Unpacking verständlicher.
Einen Ansatz auswählen und Indizes prüfen
Verwenden Sie Tuple-Unpacking für einen direkten Tausch zweier Werte und eine Schleife über Indexpaare für mehrere voneinander unabhängige Tauschvorgänge. Eine temporäre Variable ist nützlich, wenn die ausdrückliche Schrittfolge den umgebenden Code verständlicher macht. pop() und insert() verschieben beim Entfernen und Einfügen die Listenpositionen. Berechnen Sie daher die Indizes nach jedem Entfernen neu. Verwenden Sie eine Slice-Zuweisung, wenn das Umkehren des ausgewählten Bereichs das gewünschte Ergebnis ist.
Listenindizes beginnen bei 0. Ein indizierter Lese- oder Zuweisungszugriff mit einem Index außerhalb der gültigen Listenpositionen löst IndexError aus. Prüfen Sie vor dem Tausch, ob jeder Index innerhalb der Liste liegt und ob die beiden Positionen tatsächlich den gewünschten Werten entsprechen. Das ist besonders hilfreich, wenn Indizes aus Benutzereingaben stammen oder anhand anderer Daten berechnet werden.