Самый простой способ визуализировать это - подумать об итерации, работающей над списками-смещениями вместо фактических элементов - сделать что-то к первому элементу, затем второму элементу, затем третьему элементу, пока не закончится элемент , Если изменить количество элементов в списке, он изменяет смещения всех остальных элементов в списке:
lst = [1,2,3,4]
for item in lst:
if item==2:
lst.remove(item)
else:
print item
print lst
результатов в
1
4
[1,3,4]
, который имеет смысл, если вы шагаете через него, как так :
[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
Единственное реальное решение не изменить количество элементов в списке, пока вы итерацию над ней. Скопируйте элементы, которые хотите сохранить в новый список, или отследите значения, которые вы хотите удалить, и сделайте удаление по значению в отдельном проходе.
Это возвращает элементы, которые на самом деле должны быть удалены. –
@Sven извините, я исправлю это –