在python中更新循环内部的for循环计数器

时间:2017-04-26 09:01:31

标签: python for-loop

我运行了这个Python代码。

for i in range(1,11):

    i=i*2

    print(i,end=" ")

它给出了以下输出: 2 4 6 8 10 12 14 16 18 20

'i'如何达到20而仍然留在循环中? 有没有以某种方式创建“i”的新实例?

1 个答案:

答案 0 :(得分:0)

for 每次迭代设置目标变量。 range()为此提供了值,没有别的。您可以将循环体内的i设置为您喜欢的任何内容,但这不会改变range()序列为下一次迭代生成的内容。

这就是:

  • range(1, 11)序列创建迭代器。它包含对范围对象和索引的引用,从0开始。
  • 下一个值来自迭代器range(1, 11)[0],产生1
    • i = 1已执行,循环体已启动
    • 在循环体中,执行i = i * 2,将i设置为2
    • 打印
    • i,循环体结束
  • 迭代器索引增加到1。
  • 下一个值来自迭代器range(1, 11)[1],产生2
    • i = 2已执行,循环体已启动
    • 在循环体中,执行i = i * 2,将i设置为4
    • 打印
    • i,循环体结束
  • 迭代器索引增加到2。
  • 下一个值取自迭代器range(1, 11)[2],产生3
    • i = 3已执行,循环体已启动
    • 在循环体中,执行i = i * 2,将i设置为6
    • 打印
    • i,循环体结束

这一直持续到range(1, 11)[9]的循环体已经处理完毕;没有range(1, 11)[10]所以循环结束。

在任何时候都不会将i设置为循环中的不同值,从而改变循环的运行方式。你必须改变迭代,for循环迭代的对象,以改变循环的运行方式:

>>> list_of_numbers = [1, 2, 3, 4]
>>> for i in list_of_numbers:
...     discard = list_of_numbers.pop()  # making the list shorter!
...     print(i)
...
1
2

现在循环结束很早,因为我们从迭代表中删除了元素,并且“早期”达到了结束。