Heim >Backend-Entwicklung >Python-Tutorial >Warum führt das Ändern einer Liste während der Iteration zu unerwarteten Ergebnissen?
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!