Heim >Backend-Entwicklung >Python-Tutorial >Warum führt das Ändern einer Liste während der Iteration zu unerwarteten Ergebnissen?

Warum führt das Ändern einer Liste während der Iteration zu unerwarteten Ergebnissen?

Susan Sarandon
Susan SarandonOriginal
2024-12-23 19:53:17749Durchsuche

Why Does Modifying a List During Iteration Produce Unexpected Results?

Unerwartete Ergebnisse beim Ändern einer Liste während der Iteration

Beim Ändern einer Liste während der Iteration können unerwartete Ergebnisse auftreten. Betrachten Sie den folgenden Code:

numbers = list(range(1, 50))

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

print(numbers)

Trotz der Absicht, Zahlen unter 20 aus der Liste zu entfernen, enthält die resultierende Ausgabe einige dieser Zahlen. Diese Diskrepanz entsteht, weil die Liste während der Iteration geändert wird.

Konkret geht die Schleife nach dem Entfernen der ersten Zahl unter 20 (1) zum nächsten Element in der ursprünglichen Liste über, das jetzt 3 statt 2 ist . Dieser Vorgang wird fortgesetzt, was zur Entfernung aller ungeraden Zahlen unter 20 führt.

Um dieses Problem zu vermeiden, wird empfohlen, einen alternativen Ansatz zu verwenden, z. B. eine Liste Verständnisse oder Generatorausdrücke. Hier ist ein Beispiel für die Verwendung eines Listenverständnisses:

numbers = [n for n in numbers if n >= 20]

Dieser Code behält die ursprüngliche Reihenfolge der Liste bei und filtert gleichzeitig unerwünschte Elemente heraus. Alternativ können Sie die In-Place-Änderung mit einem Generatorausdruck verwenden:

numbers[:] = (n for n in numbers if n >= 20)

Wenn Sie Vorgänge an einem Element ausführen müssen, bevor Sie es entfernen, sollten Sie eine indizierte Schleife verwenden und das Element auf „Keine“ setzen. Erstellen Sie dann eine neue Liste, die nur Nicht-Keine-Elemente enthält:

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]

Das obige ist der detaillierte Inhalt vonWarum führt das Ändern einer Liste während der Iteration 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