2016-07-30 3 views
0
>>> k = 8 
>>> for i in range(k): 
     print i 
     k -= 3 
     print k 

Над код, который печатает числа от 0-7, если я использую только print i в течение цикла.Изменение значения диапазона во время итерации в Python

Я хочу понять приведенный выше код, как он работает, и есть ли способ, который мы можем обновить значение переменной, используемое в range(variable), чтобы оно повторялось по-разному.

Также он всегда выполняет итерацию до начального значения k, поэтому значение не обновляется.

Я знаю, что это глупый вопрос, но все идеи и комментарии приветствуются.

ответ

1

Вы не можете изменить диапазон после того как она генерируется. В Python 2 range(k) сделает список целых чисел от 0 до k, например: [0, 1, 2, 3, 4, 5, 6, 7]. Изменение k после того, как список был создан, ничего не сделает.

Если вы хотите изменить номер, чтобы перебирать ими, вы могли бы использовать время цикла, как это:

k = 8 
i = 0 
while i < k: 
    print i 
    k -= 3 
    i += 1 
2

Выражение range(k) оценивается только после, а не на каждой итерации. Вы не можете установить k и ожидать результата range(k), чтобы изменить, нет. От for statement documentation:

Список выражений оценивается один раз; он должен давать итерируемый объект.

Вы можете использовать while петлю вместо:

i = 0 
k = 8 
while i < k: 
    print i 
    i += 1 
    k -= 3 

while цикл не переоценивать Тест каждую итерацию. Ссылающийся на while statement documentation:

Это многократно проверяет выражение и, если оно истинно, выполняет первый набор

1

Если вы хотите изменить к и влияют на петлю, Вы должны убедиться, что вы итерация над изменяемым объектом. Например:

k = list(range(8)) 
for i in k: 
     print(i) 
     k.pop() 
     k.pop() 
     k.pop() 
     print(k) 

Или в качестве альтернативы:

k = list(range(8)) 
for i in k: 
     print(i) 
     k[:] = k[:-3] 
     print(k) 

И приведет с

0 
[0, 1, 2, 3, 4] 
1 
[0, 1] 
+0

спасибо, я уже пробовал это. Это было первым делом после того, как я понял, что мы не можем снова изменить значение функции диапазона. – bhansa

Смежные вопросы