Python的删除函数中的奇怪行为

时间:2014-02-10 19:57:11

标签: python loops behavior

任何人都可以向我解释为什么这个Python脚本会产生这个输出吗?

>>> a = range(0,50)  
>>> for x in a:  
...     a.remove(x)  
...   
>>> a  
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]

这对我来说很奇怪,因为脚本只删除每一个条目。我认为循环会迭代地删除列表中的所有项目。

2 个答案:

答案 0 :(得分:4)

什么

for x in a:

真的是它使用内部计数器,所以它会返回[0],[1],[2] ......

代码的作用是删除项目会改变循环索引应该指向的位置,所以:

第一个循环,index == 0,你删除a[0],这是0.第二个循环,索引是1,但现在,a是[1..49],a[1]是2。

等等。

答案 1 :(得分:1)

>>> a = range(0,50)  
>>> for x in a[:]:
...     a.remove(x)  
...   
>>> a  
[]

复制列表(a[:]),这样您就不会在迭代时修改它。