在 Python 中迭代期间更改范围的值

bha*_*nsa 2 python iteration loops range python-2.7

>>> k = 8
>>> for i in range(k):
        print i
        k -= 3
        print k
Run Code Online (Sandbox Code Playgroud)

上面是打印数字的代码,0-7如果我只print i在 for 循环中使用。

我想了解上面的代码是如何工作的,有什么方法可以更新使用的变量的值,range(variable)以便它以不同的方式迭代。

还有为什么它总是迭代到初始k值,为什么值不更新。

我知道这是一个愚蠢的问题,但欢迎所有想法和评论。

Aur*_*001 6

范围生成后无法更改。在Python 2,range(k)将整数列表从0到K,像这样:[0, 1, 2, 3, 4, 5, 6, 7]k列表生成后更改将无济于事。

如果要更改要迭代的数字,可以使用 while 循环,如下所示:

k = 8
i = 0
while i < k:
    print i
    k -= 3
    i += 1
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

该表达式range(k)仅计算一次,而不是每次迭代。你不能设置k并期望range(k)结果改变,不。从for声明文档

表达式列表被评估一次;它应该产生一个可迭代的对象。

您可以使用while循环来代替:

i = 0
k = 8
while i < k:
    print i
    i += 1
    k -= 3
Run Code Online (Sandbox Code Playgroud)

循环while确实会在每次迭代时重新评估测试。参考while声明文档

这会重复测试表达式,如果为真,则执行第一个套件