Чтобы понять, почему это не работает, цикл for
эквивалентен циклу while
, например:
# for x in y:
# ...
itr = iter(y)
while True:
try:
x = next(itr)
except StopIteration:
break
...
Если вы назначите что-то новое для y
, цикл будетне влияет, потому что он использует итератор только для исходного значения, присвоенного y
, а не для самого имени y
.
Однако, если вы do измените список вВ теле цикла итератор может вернуть значение, которое вы не ожидаете.Если вам нужно изменить итерацию, лучше всего получить итератор самостоятельно.
li = [4,5,6,7,8,9]
itr = iter(li)
while True:
try:
item = next(itr)
except StopIteration:
break
#do something
if item == 5:
#now continue iterating through this loop and not the old one
itr = iter([9,9,9,9,9])