Как увеличить индекс цикла при использовании с диапазоном в Python? - PullRequest
0 голосов
/ 05 мая 2018

У меня есть цикл for следующим образом:

i=0 
while true:
 print("i initialized as", i)
 for i in range(0,3):
      print ("inside for",i)
      i = i + 1
 print("exit from for i value is",i)

Теперь внутри бесконечного цикла есть для и каждый раз внутри для «i» итерация начинается с «0», в идеале «i» должна получить увеличенное значение и начинаться с 2, вывод:

 inside for 0
 inside for 1
 inside for 2

 second iteration:

 inside for 0
 inside for 1
 inside for 2
 .
 .

В идеале вывод должен быть таким:

 inside for 0
 inside for 1
 inside for 2

 second iteration:
 inside for 3
 inside for 4
 inside for 5
 .
 .

Таким образом, точка в том, что значение «i» не сохраняется, и каждый цикл времени начинается с 0, так как же я могу заставить «i» начинать с последнего увеличенного значения перед вводом в цикл for.

Ответы [ 4 ]

0 голосов
/ 05 мая 2018

Проблема здесь в том, что вы пытаетесь изменить переменную цикла цикла for. Python не мешает вам делать i = i + 1 внутри цикла, но как только управление возвращается к началу цикла, i сбрасывается на любое значение, следующее за последовательностью. Это просто способ, которым циклы for работают в Python, это также происходит, если вы перебираете список или кортеж, а не range. Например,

for i in (2, 3, 5, 7, 11):
    print(i)
    i = 10 * i
    print(i)

выход

2
20
3
30
5
50
7
70
11
110

Однако получить желаемый результат просто. В следующем коде я заменил ваш бесконечный цикл while на маленький цикл for.

i = 0 
for j in range(3):
    print("\ni initialized as", i)
    for i in range(i, i + 3):
        print ("inside for", i)
    i += 1

выход

i initialized as 0
inside for 0
inside for 1
inside for 2

i initialized as 3
inside for 3
inside for 4
inside for 5

i initialized as 6
inside for 6
inside for 7
inside for 8

Если внешний цикл не бесконечен, вы можете сделать это с помощью одного цикла и теста if. Он более компактен, но немного медленнее, поскольку должен выполнять тест на каждой итерации цикла.

outer_loops = 4
inner_loops = 3
for i in range(outer_loops * inner_loops):
    if i % inner_loops == 0:
        print("\nIteration", i // inner_loops)
    print ("inside for", i)

выход

Iteration 0
inside for 0
inside for 1
inside for 2

Iteration 1
inside for 3
inside for 4
inside for 5

Iteration 2
inside for 6
inside for 7
inside for 8

Iteration 3
inside for 9
inside for 10
inside for 11
0 голосов
/ 05 мая 2018

Не перезаписывать переменную i в цикле for (я изменил это на _):

i=0 
while true:
 print("i initialized as", i)
 for _ in range(0,3):
      print ("inside for",i)
      i = i + 1
 print("exit from for i value is",i)
0 голосов
/ 05 мая 2018

Может быть, это поможет:

i=0 
while true:
    print("i initialized as", i)
    for x in range(i+1, i+4):
       print ("inside for",i)
       i = i + 1
print("exit from for i value is",i)
0 голосов
/ 05 мая 2018

Вы не можете контролировать i, когда используете for i in .... Он установлен на то, что определяет цикл for при цикле.

Здесь, просто не используйте i для вашего индекса цикла, используйте анонимную переменную, такую ​​как _, чтобы посчитать 3 раза, оставьте i в качестве "глобального" счетчика:

i=0
while i<10:  # just to stop after a while for the demo
 print("i initialized as", i)
 for _ in range(0,3):
      print ("inside for",i)
      i = i + 1
 print("exit from for i value is",i)

выход:

inside for 0
inside for 1
inside for 2
exit from for i value is 3
i initialized as 3
inside for 3
inside for 4
inside for 5
exit from for i value is 6
i initialized as 6
inside for 6
inside for 7
inside for 8
exit from for i value is 9
i initialized as 9
inside for 9
inside for 10
inside for 11
exit from for i value is 12

В сторону: while true должно быть while True. В отличие от Java и C ++, логические значения пишутся с заглавной буквы в python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...