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
Freigeben: 2024-12-23 19:53:17
Original
794 Leute haben es durchsucht

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)
Nach dem Login kopieren

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]
Nach dem Login kopieren

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)
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage