修改数组不会影响其在外部循环中的长度

时间:2019-04-01 14:14:34

标签: python

我有一个这样的例子:

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是一个可变数组,它的长度在循环期间会立即改变吗?

3 个答案:

答案 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