HOWTO · Python

Wie man ein Element in Python-Liste ersetzt

Ersetze Werte in einer Python-Liste per Index oder anhand einer Bedingung. Der Artikel zeigt indizierte Zuweisungen, Schleifen mit `enumerate()`, List Comprehensions und `map()` mit einer Ersetzungsfunktion und erklärt, welche Ansätze die bestehende Liste ändern oder eine neue erstellen.

Auf dieser Seite

Weise einem Wert in einer Python-Liste per Index einen neuen Wert zu, wenn du seine Position kennst. Sollen Werte anhand einer Bedingung ersetzt werden, kannst du eine Schleife mit enumerate(), eine Listenkomprehension mit anschließender Zuweisung an die Variable oder map() mit einer Ersetzungsfunktion verwenden. Eine indizierte Zuweisung und eine Schleife ändern die vorhandene Liste; eine Listenkomprehension oder ein in eine Liste umgewandeltes Ergebnis von map() erstellt eine neue Liste.

Ein Element anhand seines Index ersetzen

Listenindizes beginnen bei 0. Der Index 2 bezeichnet also das dritte Element. Weise den Ersatzwert direkt dieser Position zu:

Führe dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

prices = [12, 18, 25, 31]
prices[2] = 27
print(prices)

Dadurch wird prices direkt geändert. Andere Variablen, die auf dieselbe Liste verweisen, sehen die Änderung daher ebenfalls. Verwende diesen Ansatz, wenn die Position bekannt ist. Berechnest du den Index anhand anderer Daten, stelle vor der Zuweisung sicher, dass er zu einem vorhandenen Element gehört.

Passende Elemente mit einer Schleife ersetzen

Wenn eine Bedingung bestimmt, welche Werte ersetzt werden sollen, durchläufst du mit enumerate() sowohl die Positionen als auch die Werte. Mit dem Index kann die Schleife Werte in der ursprünglichen Liste zuweisen:

Führe dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

scores = [62, 85, 62, 91]
for index, score in enumerate(scores):
    if score == 62:
        scores[index] = 70
print(scores)

Jeder passende Wert wird geändert, auch wenn er mehrfach vorkommt. Die Schleife verändert dieselbe Liste, statt eine Ersatzliste zu erstellen. Verwende eine Schleife, wenn die Ersetzungsregel mehrere Anweisungen benötigt oder du das ursprüngliche Objekt ändern möchtest.

Passende Elemente mit einer Listenkomprehension ersetzen

Mit einer Listenkomprehension lässt sich eine bedingte Ersetzung in einem Ausdruck formulieren. Weise das Ergebnis wieder der Variablen zu, wenn sie anschließend auf die aktualisierten Werte verweisen soll:

Führe dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

names = ["Ada", "Guest", "Lin", "Guest"]
names = ["Visitor" if name == "Guest" else name for name in names]
print(names)

Die Listenkomprehension erstellt eine neue Liste. Durch die Zuweisung an names verweist diese Variable nun auf die neue Liste. Andere Variablen, die auf die ursprüngliche Liste verwiesen, zeigen weiterhin auf diese alte Liste. Eine nicht zugewiesene Listenkomprehension erstellt lediglich ein Ergebnis und verwirft es wieder; sie ersetzt daher keine Werte in der ursprünglichen Liste. Dieser Ansatz eignet sich gut für eine kurze Regel, die für jeden Eingabewert genau einen Ausgabewert erzeugt. Im unveränderten Beispiel bleiben die Zeichenfolgen Guest und Visitor englisch; auch die angezeigte Ausgabe enthält diese englischen Werte.

Listenelemente mit map() transformieren

map() wendet eine Funktion auf jedes Element an. Wenn du eine Liste als Ergebnis brauchst, übergib die transformierten Werte an list():

Führe dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

def replace_guest(name):
    return "Visitor" if name == "Guest" else name

names = ["Ada", "Guest", "Lin"]
updated_names = list(map(replace_guest, names))
print(updated_names)

Hier gibt die Funktion für passende Werte einen Ersatzwert zurück und lässt alle anderen Werte unverändert. Wird das Ergebnis in eine Liste umgewandelt, entsteht eine neue Liste; names bleibt unverändert. Dieser Ansatz ist nützlich, wenn die Transformation bereits in einer benannten Funktion steht oder an anderer Stelle wiederverwendet werden kann. Für eine kleine, direkt angegebene Regel ist eine Listenkomprehension oft leichter zu überblicken. Auch hier bleiben Guest und Visitor im unveränderten Beispiel englisch; die angezeigte Ausgabe enthält diese englischen Zeichenfolgen.

Den passenden Ansatz wählen

Verwende eine indizierte Zuweisung für eine einzelne bekannte Position. Soll eine Bedingung Elemente auswählen und die vorhandene Liste geändert werden, eignet sich eine Schleife mit enumerate(). Wähle eine Listenkomprehension, wenn du eine knappe bedingte Transformation möchtest, die eine neue Liste erzeugt. Verwende map(), wenn die Anwendung einer Funktion auf jeden Wert die Transformation verständlicher macht. Wandle das Ergebnis in eine Liste um, wenn dein Code eine Liste benötigt.

Die Ansätze unterscheiden sich vor allem darin, wie sie die Regel ausdrücken und ob sie eine Liste verändern oder neu erstellen. Entscheide anhand deiner Daten und danach, ob andere Teile deines Programms Änderungen an der ursprünglichen Liste sehen sollen. Für jede Ersetzungsaufgabe gibt es nicht dieselbe beste Lösung.