HOWTO · Python

Entfernen mehrere Elemente aus einer Liste in Python

Wir können if...else-Steueranweisungen, List Comprehensions, Listen-Slicing und for-Schleifen verwenden, um mehrere Elemente aus einer Liste in Python zu entfernen.

Auf dieser Seite

Um mehrere Elemente aus einer Python-Liste zu entfernen, entscheide zuerst, ob du nach dem Wert eines Elements oder nach seiner Position auswählst. Eine List Comprehension eignet sich, um nach Werten zu filtern und die ursprüngliche Liste beizubehalten; mit del änderst du die Liste, wenn du einen Bereich oder bekannte Indizes entfernst.

Entscheiden, ob Werte oder Indizes entfernt werden sollen

Verwende eine Bedingung, wenn die Elemente selbst bestimmen, was in der Liste bleibt, zum Beispiel wenn nur gerade Zahlen behalten werden sollen. Verwende Indizes, wenn du die zu löschenden Positionen kennst, unabhängig davon, welche Werte dort stehen. Eine List Comprehension erstellt eine neue Liste, sodass die Ausgangsliste erhalten bleibt. del verändert die bestehende Liste direkt. Das ist wichtig, wenn anderer Code eine Referenz auf diese Liste hält.

Werte entfernen, die einer Bedingung entsprechen

Dieses Beispiel übernimmt die geraden Werte in eine neue Liste. Passe den Ausdruck nach if an eine andere Regel an, etwa indem du eine bestimmte Zeichenfolge ausschließt oder nur Werte oberhalb eines Grenzwerts behältst.

Führe dieses Beispiel aus:

Die Beschriftungen innerhalb des unveränderten Code- und Ausgabeblocks bleiben auf Englisch.

numbers = [2, 3, 4, 5, 6, 7, 8]
evens = [number for number in numbers if number % 2 == 0]
print("Original:", numbers)
print("Filtered:", evens)

Die ursprüngliche Liste wird nicht verändert. Rufe remove() nicht in einer Schleife über dieselbe Liste auf: Beim Löschen eines Elements rücken die übrigen Elemente nach, sodass aufeinanderfolgende Treffer übersprungen werden können. Wenn die Liste direkt verändert werden muss, durchlaufe eine Kopie, zum Beispiel mit for value in numbers.copy():, und entferne passende Werte aus numbers. Zum Filtern ist die List Comprehension kürzer und vermeidet dieses Änderungsrisiko.

Einen zusammenhängenden Bereich mit del und Slicing löschen

Listenindizes beginnen bei null. In einem Slice start:stop ist start eingeschlossen und stop ausgeschlossen. Daher löscht del items[2:5] die Elemente an den Indizes 2, 3 und 4. Dabei wird die Liste selbst verändert. Mit derselben Halbintervallregel lassen sich auch angrenzende Bereiche leicht nachvollziehen: An der Stop-Position beginnt das erste Element, das erhalten bleibt.

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

items = ["a", "b", "c", "d", "e", "f"]
del items[2:5]
print(items)

Wird ein Slice-Endpunkt weggelassen, gilt der Anfang beziehungsweise das Ende der Liste. Zum Beispiel entfernt del items[:2] die ersten beiden Elemente, während del items[3:] alles ab Index 3 löscht. Diese Schreibweisen eignen sich für zusammenhängende Bereiche, wählen aber keine verstreuten Positionen aus.

Die Beschriftungen innerhalb der unveränderten Code- und Ausgabeblöcke bleiben auf Englisch.

Ausgewählte Indizes sicher löschen

Wenn die zu löschenden Positionen verstreut liegen, lösche die Indizes in absteigender Reihenfolge. Wird zuerst ein höherer Index entfernt, bleiben die niedrigeren Positionen unverändert. Verarbeitest du die Indizes von klein nach groß, rücken bei jedem Löschen spätere Elemente nach links und die Indizes verweisen anschließend auf andere Elemente.

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

items = ["a", "b", "c", "d", "e", "f"]
indexes_to_remove = [0, 2, 5]
for index in sorted(indexes_to_remove, reverse=True):
    del items[index]
print(items)

Verwende gültige Indizes für die Liste, wie sie vor dem Löschen aussieht, und vermeide doppelte Einträge in der Auswahl. Dieses Vorgehen verändert items; erstelle vorher eine Kopie, wenn die ursprünglichen Werte erhalten bleiben sollen. Wenn du Werte anhand einer Bedingung statt anhand ihrer Position auswählst, verwende stattdessen eine Filterung.

Die Beschriftungen innerhalb der unveränderten Code- und Ausgabeblöcke bleiben auf Englisch.

Den passenden Ansatz für deine Liste wählen

Verwende eine List Comprehension, um nach Werten zu filtern und ein separates Ergebnis zu erstellen. Mit del items[start:stop] veränderst du die Liste, indem du einen zusammenhängenden Bereich entfernst. Sind bestimmte, verstreut liegende Positionen bekannt, sortiere ihre Indizes absteigend und lösche sie nacheinander. So bleibt die Auswahlregel klar und versehentliche Änderungen an den falschen Elementen lassen sich vermeiden.