Python中for循环手动修改i导致输出异常的问题咨询
解惑Python For循环的迭代逻辑
嘿,我来帮你搞清楚这个问题~
首先先把你的代码、实际输出和疑问整理清楚:
你的代码
name='ABCDE' length=len(name) for i in range(0,length): print(name[i],' ',end='') print(i, ' ', end='') i+=1 print(i,' ',end='') print('hello')
实际输出
A 0 1 hello B 1 2 hello C 2 3 hello D 3 4 hello E 4 5 hello
你的疑惑
你认为第二次迭代时for循环应该再次递增i,预期第二次输出是C 2 3 hello,但实际却是B 1 2 hello,搞不懂为什么。
核心问题:Python的For循环不关心你在循环体内修改的i值
Python里的for循环是迭代一个预先生成的序列(这里range(0,5)生成的是[0,1,2,3,4]),每次循环的i是直接从这个序列里取下一个值,你在循环体里手动写i+=1根本不会影响下一次循环的i!
我们一步步拆解每一次循环的过程:
- 第一次循环:
i取序列第一个值0
打印A 0→ 手动i+=1让i变成1→ 打印1 hello→ 输出A 0 1 hello - 第二次循环:for循环直接取序列的下一个值
1(完全不管你刚才把i改成了1)
打印B 1→ 手动i+=1让i变成2→ 打印2 hello→ 输出B 1 2 hello - 第三次循环:for循环取序列的第三个值
2
打印C 2→ 手动i+=1让i变成3→ 打印3 hello→ 这就是你预期的那行,但它是第三次迭代的结果,不是第二次。
如果想实现你预期的效果(跳过一个元素迭代)
如果你希望每次迭代后i多增加1,达到跳过一个元素的效果,那你需要用while循环来手动控制i的变化,或者修改range的步长:
方法1:用while循环
name='ABCDE' length=len(name) i = 0 while i < length: print(name[i],' ',end='') print(i, ' ', end='') i+=1 print(i,' ',end='') print('hello') i += 1 # 这里额外加1,让下一次迭代跳过一个元素
方法2:修改range的步长
如果你的需求是每次迭代i增加2,直接给range加步长参数:
name='ABCDE' length=len(name) for i in range(0,length,2): print(name[i],' ',end='') print(i, ' ', end='') next_i = i + 1 print(next_i,' ',end='') print('hello')
这样输出就会是:
A 0 1 hello C 2 3 hello E 4 5 hello
内容的提问来源于stack exchange,提问作者Shivank
相关产品推荐
相关产品推荐

