【问题标题】:Why can't "i" be manipulated inside for-loop [duplicate]为什么不能在 for 循环中操作“i”[重复]
【发布时间】:2019-06-06 07:00:51
【问题描述】:

为什么会这样:

for i in range(10):
 i += 1
 print(i)

返回:

1
2
3
4
5
6
7
8
9
10

代替:

2
4
6
8
10

?

如果需要,这里会提供一些细节。

【问题讨论】:

    标签: python for-loop


    【解决方案1】:
    for i in range(10):
        i += 1
        print(i)
    

    等价于

    iterator = iter(range(10))
    try:
        while True:
            i = next(iterator)
            i += 1
            print(i)
    except StopIteration:
        pass
    

    iter(range(10)) 产生的 iterator 将产生值 012...89 每次调用 next 时都会使用它,然后引发 @987654331 @11 号来电。

    因此,您可以看到 i 在每次迭代中都被 range(10) 中的新值覆盖,而不是像在例如C 风格 for 循环。

    【讨论】:

      【解决方案2】:

      你应该在你的范围内使用步骤:

      for i in range(2,11,2):
          print(i)
      

      输出:

      2
      4
      6
      8
      10
      

      【讨论】:

        【解决方案3】:

        i 在每次循环迭代时分配,覆盖对其值所做的任何更改。

        for i in range(10):
            i += 1
            print(i)
        

        相当于:

         i = 0 # first iiteration
         i += 1
         print(i)
        
         i = 1 # second iiteration
         i += 1
         print(i)
        
         i = 2 # third iiteration
         i += 1
         print(i)
        
         # etc up to i = 9
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-24
          • 1970-01-01
          • 2019-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-28
          相关资源
          最近更新 更多