这很奇怪。
a = range(10)
def remove_pop():
global a
a.pop()
for i in a:
remove_pop()
print i,
print '\n',a
0 1 2 3 4
[0, 1, 2, 3, 4]
为什么循环过早退出?只有在a
清空后它才会退出吗?
答案 0 :(得分:1)
一旦索引i大于列表中的元素数,循环就会停止迭代。你弹出了5个元素,所以一旦列表大小和你的索引都等于5,它就会停止迭代
答案 1 :(得分:0)
首先,正如我在评论中所说。让我们尝试运行您的代码:
a = range(10) # now, a is [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
...
for i in a:
remove_pop()
现在,第一个循环a
将变为[0, 1, 2, 3, 4, 5, 6, 7, 8]
,for
仍然保持读取a
。
让我们看看循环:
for
读取第一个元素,a
为[1, 2, 3, 4, 5, 6, 7, 8, 9]
,remove_pop()
将删除9
,因此列表循环现在看起来像这样:[1, 2, 3, 4, 5, 6, 7, 8]
。但真正的列表是[0, 1, 2, 3, 4, 5, 6, 7, 8]
。
for
阅读1
,remove_pop()
删除8
。现在列表如下:[2, 3, 4, 5, 6, 7]
。但真正的列表是[0, 1, 2, 3, 4, 5, 6, 7]
。
...
for
阅读4
,remove_pop()
删除5
。此循环中的列表现在为空,因为for
只读取了元素,但它们并未删除它们,因此a
现在为[0, 1, 2, 3, 4]
。 答案 2 :(得分:0)
最初有一个{0.1.2.3.4.5.6.7.8.9},然后在每次迭代中你删除一个元素作为pop从列表中删除最后一个元素
见输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0 [0, 1, 2, 3, 4, 5, 6, 7, 8]
1 [0, 1, 2, 3, 4, 5, 6, 7]
2 [0, 1, 2, 3, 4, 5, 6]
3 [0, 1, 2, 3, 4, 5]
4
此时for循环索引等于大小。所以循环退出,因为没有要迭代的元素。