>>> k = 8
>>> for i in range(k):
print i
k -= 3
print k
如果我在for循环中只使用0-7
,那么就是从print i
打印数字的代码。
我想了解上面的代码是如何工作的,有没有什么方法可以更新range(variable)
中使用的变量的值,所以它以不同的方式迭代。
另外,为什么它总是迭代到最初的k
值,为什么值没有更新。
我知道这是一个愚蠢的问题,但欢迎所有想法和评论。
答案 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]