Aus einer Liste entfernen, während darüber iteriert wird
Beim Iterieren über eine Liste und dem Entfernen von Elementen kann das Verhalten von Python rätselhaft sein. Der Codeausschnitt unten:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
Gibt [0, 2, 3, 5, 6, 8, 9] anstelle des erwarteten [0, 2, 4, 6, 8] aus.
Verstehen des iterativen Entfernungsverhaltens
Diese Ausgabe ergibt sich aus dem Art und Weise, wie Python während der Iteration mit veränderlichen Sequenzen umgeht. Wenn „remove“ aufgerufen wird, wird die zugrunde liegende Liste geändert. Der Iterator bleibt jedoch derselbe und durchläuft weiterhin die geänderte Liste.
Das folgende Diagramm veranschaulicht den Entfernungsprozess:
[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 ^
Beantwortung der verbleibenden Fragen
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!