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

时间:2016-07-30 10:40:06

标签: python python-2.7 loops range iteration

>>> k = 8
>>> for i in range(k):
        print i
        k -= 3
        print k

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

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

另外,为什么它总是迭代到最初的k值,为什么值没有更新。

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

3 个答案:

答案 0 :(得分:2)

表达式range(k)只评估一次,而不是每次迭代。您无法设置k并期望range(k)结果发生变化,不会。来自for statement documentation

  

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

您可以改为使用while循环:

i = 0
k = 8
while i < k:
    print i
    i += 1
    k -= 3

while循环会在每次迭代时重新评估测试。引用while statement documentation

  

这会反复测试表达式,如果是,则执行第一个套件

答案 1 :(得分:1)

在生成范围后,您无法更改范围。在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

答案 2 :(得分:1)

如果你想改变k并影响循环,你需要确保迭代可变对象。例如:

k = list(range(8))
for i in k:
        print(i)
        k.pop()
        k.pop()
        k.pop()
        print(k)

或者:

k = list(range(8))
for i in k:
        print(i)
        k[:] = k[:-3]
        print(k)

两者都会以

结果
0
[0, 1, 2, 3, 4]
1
[0, 1]