Heim >Backend-Entwicklung >Python-Tutorial >Warum führt das iterative Entfernen von Elementen aus einer Python-Liste zu unerwarteten Ergebnissen?

Warum führt das iterative Entfernen von Elementen aus einer Python-Liste zu unerwarteten Ergebnissen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 06:01:13261Durchsuche

Why Does Iteratively Removing Items from a Python List Produce Unexpected Results?

Seltsames Verhalten beim iterativen Entfernen von Elementen in Python

In Python können seltsame Ergebnisse auftreten, wenn während der Iteration Elemente aus einer Liste gelöscht werden. Betrachten Sie den folgenden Code:

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)

Erwartete Ausgabe: [20, 21, ..., 49]

Tatsächliche Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]

Grund:

Das Problem ergibt sich aus der Änderung der Liste während der Iteration. Während der ersten Schleifeniteration wird 1 entfernt. Die nachfolgende Iteration zeigt jedoch nicht mehr auf 2 in der verkürzten Liste, sondern auf 3. Dies wird fortgesetzt, bis nur noch Elemente größer als 20 übrig bleiben.

Lösungen:

  • Liste Verständnis:
numbers = [n for n in numbers if n >= 20]
  • Änderung vor Ort:
numbers[:] = (n for n in numbers if n >= 20)
  • Vorherige Verarbeitung mit Generator Ausdruck:
for i, n in enumerate(numbers):
    if n < 20:
        print("do something")
        numbers[i] = None
numbers = [n for n in numbers if n is not None]

Es ist wichtig zu beachten, dass das Ändern der Länge einer Liste während der Iteration im Allgemeinen nicht empfohlen wird. Die bereitgestellten Lösungen bieten alternative Ansätze zum Erreichen des gewünschten Ergebnisses.

Das obige ist der detaillierte Inhalt vonWarum führt das iterative Entfernen von Elementen aus einer Python-Liste zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn