Как работает цикл for в питоне?

Есть цикл
towers = [1, 2]
for i in towers:
towers.remove(i)

Объясните, при удалении объекта, у нас из списка пропадает цифра 1. Что дальше происходит?
На следующей иттерации i = 2??
Просто у меня в одном коде как-будто цикл заканчивается, хотя там еще остается элемент.

Вопрос простой, но из-за отсутствия отладки в Jupyter самому не разобраться.
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Метод list.remove() удаляет элемент с указанным значением из списка.
Проблема в том, что ты одновременно итерируешься по списку циклом for, и модифицируешь этот список через remove().
Многие языки такую операцию вообще запрещают, питон, видимо, нет, но суть остаётся - когда ты удалил 1 (элемент с индексом 0), элементы списка сдвигаются к началу. И for видит, что элемент с индексом 0 удалили, а с элемента индексом 1 уже нет (из-за сдвига). Ну и решает что цикл кончился. Поэтому лучше таких ситуаций избегать!

Решение:
1. Если позарез нужно итерироваться и модифицировать список в одном цикле, сделай копию, например с помощью среза:
for i in towers[:]:
2. Если нужно просто очистить содержимое списка, не удаляя сам список, towers.clear() тебе в помощь.
3. Если нужно оставить элементы, соответствующие условию, то подойдёт функция filter() или list comprehensions.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы