我有一个这样的例子:
In [2]: l = list(range(10))
In [3]: l
Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [4]: for i in range(len(l)):
...: l.append(1)
...: print("yes")
...:
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
在这种情况下,l在循环中每次都会附加“ l”,因此len(l)每次都会增加1。
我认为这应该是一个无限循环。
结果证明我的预测是错误的,
如何才能直观地了解这种情况。
l是一个可变数组,它的长度在循环期间会立即改变吗?
答案 0 :(得分:3)
len(l)
在进入循环之前被评估。
另一方面,for i in l
将引起无限循环。
答案 1 :(得分:0)
只有在进入循环时才评估len(l)语句。因此实际上,代码正在为range(10)中的i执行。
答案 2 :(得分:0)
问题是len()
被评估一次。但是,要实现您所说的目标,可以使用while
循环:
xs = [1]
i = 0
while i < len(xs):
xs.append(1)
i += 1