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