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

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

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

Вопрос простой, но из-за отсутствия отладки в Jupyter самому не разобраться.
  • Вопрос задан
  • 168 просмотров
Решения вопроса 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.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы