все так работает.
Возьмём такой код:
lst = [1, 2, 3, 4, 5]
или
lst = [1, 2, 3, 4]
for i in lst:
lst.remove(i)
print(lst)
В любом случае из 2-х приведенных выше списков, вывод будет: [2, 4].
При этом, если поменять запись в цикле for на такую:
for i in lst.copy():
То вывод уже возвращает по понятной причине (вроде понятной), пустой список. Каким же образом действует цикл for в первом случае?...
да
Спасибо!
Фактически for перебирает элементы списка по индексам последовательно. При удалении элементов из списка индексы "съезжают", но for об этом не знает.
то есть это просто то же самое, что for idx in range(len(lst)): do_something() ?
Хотел написать на это разоблачение, что во втором списке это уже не работало бы, но кажется я теперь и сам понял. Возможно он просто на каждой итерации узнает количество элементов в списке, уточняет, можно ли с помощью постоянно увеличивающейся переменной-итератора к нему обратиться, и если нет, то просто завершает сие действо.
В общем, очень мудреная вещь, проще просто помнить, что это ужос.
нет, просто не заниматься подобной чушью, как и добавление
Ну, и это тоже.))
Обсуждают сегодня