Почему следующий простой цикл не сохраняет значение i в конце цикла?
for i in range( 1, 10 ):
print i
i = i + 3
Вышеприведенные отпечатки:
1
2
3
4
5
6
7
8
9
Но он должен печатать:
1
4
7
Ответ 1
for устанавливаетi каждую итерацию, до следующего значения от повторного итерации объекта. Все, что вы установили в цикле i, в этой точке игнорируется.
Затем пакет выполняется один раз для каждого элемента, предоставленного итератором, в порядке возрастания индексов. Каждый элемент по очереди присваивается целевому списку с использованием стандартных правил для назначений, а затем выполняется пакет.
i - это список целей здесь, поэтому каждому из объектов присваивается значение range(1, 10). Установка i на что-то еще позже не изменит выражения range(1, 10).
Если вы хотите создать цикл, в котором вы изменяете i, вместо этого используйте цикл while; он переустанавливает условие каждый раз с помощью:
i = 1
while i < 10:
print i
i += 3
но будет проще просто использовать range() с шагом, создавая значения спереди: