Задать вопрос

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

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

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

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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽