在python中与范围一起使用时如何增加for循环索引?

新手上路,请多包涵

我有一个 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)

现在在 while 无限循环中有 for 并且每次在 for “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 循环之前从最后一个递增的值开始。

原文由 golu kashyap 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 417
2 个回答

当您使用 i 时,您无法控制 for i in ... 。它设置为 for 循环决定何时循环。

在这里,只是不要使用 i 作为循环索引,使用匿名变量,如 _ 计数 3 次,保留 i 计数器 as75 :

 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 中大写。

原文由 Jean-François Fabre 发布,翻译遵循 CC BY-SA 4.0 许可协议

这里的问题是您正在尝试修改 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

不过,要获得所需的输出很容易。在下面的代码中,我用一个小的 for 循环替换了你的无限 while --- 循环。

 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

原文由 PM 2Ring 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题