Python for循环删除中途停止

时间:2014-03-25 01:06:29

标签: python list for-loop

刚开始学习Python。我很享受它,文档和人们说的一样有用。但是显然我没有得到Python的两个特性:那些列表和那些for循环。

此代码的结果:

lets = ['a','b','c','d','e','f','g','h','i','j']

for j in lets:
    del lets[0]
    print(lets)

这是:

['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
['d', 'e', 'f', 'g', 'h', 'i', 'j']
['e', 'f', 'g', 'h', 'i', 'j']
['f', 'g', 'h', 'i', 'j']

为什么它停在五步而不是十步(因此删除所有项目)?

2 个答案:

答案 0 :(得分:4)

您在迭代时修改集合。这是一个巨大的红旗 - 永远不要这样做。

如果您想修复上述代码,请迭代lets副本

for j in lets[:]:
    del lets[0]

或其他一些与lets长度相同的对象,例如range(len(lets))

我会指出上述内容更简单地使用lets.clear()

完成

答案 1 :(得分:2)

据我所知,lets中有十个元素。你的循环停在五点。删除五个元素后,剩下五个元素。在第五个循环之后,它会检查lets中有多少个元素,看到五个,并且因为它已经循环五次而停止。