Итерация по list
и одновременно с его внутренним блоком, если вы используете метод remove
или append
для элемента, это неправильный способ сделать это.В принципе лучше поменять кодировку на другой способ.Как предложил Остин в своем коде или использовать отдельный индекс вместо итеративного индекса или элемента.
То есть
adj = [[3, 4, 5, False], [8, 7, False], [0, True], [-1, False], [1, True], [0, 2, False], [0, 2, True], [1, True], [4, False]]
del_index = 0
for i in range(len(adj)):
print("for loop: ", adj[del_index])
if adj[del_index][-1] is True:
adj.remove(adj[del_index])
else:
del_index+=1
print("adj after all execution: ", adj)
Для этой цели можно применить фильтр
filter(lambda elem: elem[-1] is True, adj)
Это может привести к сбою в вашей системе, так как элемент добавления в список и в то же время повторяется по тому же.
crash_my_system = [0]
for i in crash_my_system: crash_my_system.append(i+1)
Это верно не только для List
.это общее для всех изменяемых структур данных, таких как Dict
.См. блог Кристофа Цвершке