Il modo più semplice per visualizzarlo consiste nel pensare all'iterazione che agisce sugli elenchi di offset anziché sugli oggetti effettivi: fare qualcosa per il primo elemento, quindi il secondo elemento, quindi il terzo elemento, finché non esaurisce gli elementi . Se si modifica il numero di elementi nella lista, cambia gli offset di tutti gli altri elementi della lista:
lst = [1,2,3,4]
for item in lst:
if item==2:
lst.remove(item)
else:
print item
print lst
risultati in
1
4
[1,3,4]
che ha un senso se fate un passo attraverso di essa in questo modo :
[1,2,3,4]
^
first item is not 2, so print it -> 1
[1,2,3,4]
^
second item is 2, so remove it
[1,3,4]
^
third item is 4, so print it -> 4
l'unica vera soluzione è non modificare il numero di elementi nella lista, mentre si sta iterando su di esso. Copia gli elementi che desideri conservare in un nuovo elenco o tieni traccia dei valori che desideri rimuovere e rimuovi il valore per valore in un passaggio separato.
fonte
2011-02-10 18:28:38
Restituisce gli articoli che dovrebbero essere effettivamente rimossi. –
@ Spiacente, lo aggiusterò –