Code:
arr = [ i for i in xrange(10) ]
for i in arr:
if i in arr:
print i
arr.pop(0)
print arr
和输出:
$ python2.7 ts.py
0
2
4
6
8
[5, 6, 7, 8, 9]
为什么会是这样的结果呢?难道不应该吗[]
?
不建议在迭代时修改序列(或映射)。它会弄乱内部指针。
例如,下面的代码永远不会结束。
arr = [1,2,3]
for i in arr:
print i
arr.append(i)
根据for声明 - 注意 http://docs.python.org/2/reference/compound_stmts.html#the-for-statement:
Note:当序列被修改时有一个微妙之处
循环(这只能发生在可变序列,即列表)。一个
内部计数器用于跟踪接下来使用哪个项目,并且
这在每次迭代时都会增加。当这个计数器达到
循环终止的序列的长度。这意味着如果
suite 从序列中删除当前(或前一个)项目,
下一个项目将被跳过(因为它获取当前项目的索引
已经被处理过)。同样,如果套件插入
序列中当前项目之前的项目,当前项目将是
下次通过循环再次处理。这可能会导致令人讨厌的
可以通过使用切片制作临时副本来避免错误
整个序列,例如
for x in a[:]:
if x < 0: a.remove(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)