Удаление из списка при итерации по нему

Следующий код:

a = list(range(10))
remove = False
for b in a:
    if remove:
        a.remove(b)
    remove = not remove
print(a)

Выводит [0, 2, 3, 5, 6, 8, 9] вместо [0, 2, 4, 6, 8] при использовании Python 3.2.

  1. Почему он выводит именно эти значения?
  2. Почему не отображается ошибка, указывающая на то, что базовый итератор изменяется?
  3. Изменилась ли механика по сравнению с более ранними версиями Python в отношении этого поведения?

Обратите внимание, что я не ищу обойти поведение, но понять его.

12
задан Matt Joiner 28 June 2011 в 02:19
поделиться