Я нашел головоломку python и не могу понять, почему это работает.Изменение списка при повторении
x = ['a','b','c']
for m in x:
x.remove(m)
и после этого цикла x = ['b']
. Но почему?
Насколько я понимаю for
ключевое слово неявно создает итератор для этого списка. Делает .remove()
звонки __next__()
метод так b
пропущен? Я не могу найти никаких упоминаний об этом, но это мое лучшее предположение.
Поскольку указатели не обновляются при удалении элемента. Последний индекс хранится через итерации, когда вы мутируете элементы, сдвигаются. –
Это не документированное поведение и специфично для реализации. Избегайте. Здесь обсуждается: https://unspecified.wordpress.com/2009/02/12/thou-shalt-not-modify-a-list-during-iteration/ – cdarke
Итератор, вероятно, имеет реализацию, подобную «i = 0 , а i