Najprostszym sposobem wizualizacji jest myślenie o iteracji działającej na przesunięciach list zamiast rzeczywistych elementów - zrób coś dla pierwszego elementu, następnie drugiego elementu, a następnie trzeciego elementu, dopóki nie zabraknie elementów . W przypadku zmiany liczby elementów na liście, zmienia przesunięcia wszystkich pozostałych elementów w liście:
lst = [1,2,3,4]
for item in lst:
if item==2:
lst.remove(item)
else:
print item
print lst
wyników w
1
4
[1,3,4]
co ma sens, jeśli przejść przez niego jak tak :
[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
jedynym rozwiązaniem jest nie zmienić liczbę pozycji na liście podczas iteracji nad nim. Skopiuj elementy, które chcesz zachować, do nowej listy lub śledź wartości, które chcesz usunąć, i usuń wartość według wartości w oddzielnym przebiegu.
Powoduje zwrócenie elementów, które powinny zostać usunięte. –
@Sven sorry, naprawię to –