Listenentfernung während der Iteration in Python verstehen
Während der Iteration über eine Liste kann es notwendig sein, Elemente zu entfernen. Dies kann jedoch zu unerwartetem Verhalten führen, wenn die Entfernung nicht korrekt durchgeführt wird.
Bedenken Sie den Python-Code:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
Dieser Code erzeugt die Ausgabe [0, 2, 3, 5 , 6, 8, 9] anstelle der erwarteten [0, 2, 4, 6, 8]. Diese Anomalie entsteht durch die Art und Weise, wie Python während der Iteration mit veränderlichen Objekten umgeht.
Visuelle Erläuterung des Problems
Die Abfolge der Vorgänge kann wie folgt visualisiert werden:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | b = 0; remove? no ^ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | b = 1; remove? yes ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] | b = 3; remove? no ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] | b = 4; remove? yes ^ [0, 2, 3, 5, 6, 7, 8, 9] | b = 6; remove? no ^ [0, 2, 3, 5, 6, 7, 8, 9] | b = 7; remove? yes ^ [0, 2, 3, 5, 6, 8, 9] | b = 9; remove? no ^
Kein Fehler Hinweis
Python gibt keinen Fehler aus, wenn der zugrunde liegende Iterator geändert wird, da die Bestimmung, wann und wie sich eine Mutation auf den Iterator auswirken würde, eine umfangreiche Laufzeitanalyse erfordern würde, was die Ausführung erheblich verlangsamen würde.
Verhaltenskonsistenz
Das in diesem Beispiel beschriebene Verhalten ist in allen Python-Versionen konsistent geblieben, was gewährleistet vorhersehbare Ausführung von Code, der veränderbare Objekte während der Iteration ändert.
Das obige ist der detaillierte Inhalt vonWarum führt das Entfernen von Elementen aus einer Python-Liste während der Iteration zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!