我在下面的代码中得到了一个奇怪的结果。
mylist = [1,2,3,4,5,6,7,8,9,10]
for i in mylist:
mylist.remove(i)
print (mylist)
以某种方式生成[2,4,6,8,10]。如果我想删除所有,我会使用“clear()”。但是,我只对正在发生的事情感兴趣。我是否为系统偏好做错了什么?谢谢您的帮助。
答案 0 :(得分:-1)
仅供将来参考,使用Python 2.7 this is the explanation you are looking for:
循环修改序列时有一个微妙之处 (这只能发生在可变序列,即列表中)。一个内部 counter用于跟踪下一个使用的项目,这是 每次迭代时递增。当这个计数器到达时 循环终止的序列长度。这意味着,如果 suite从序列中删除当前(或前一个)项目 将跳过下一个项目(因为它获取当前项目的索引 已经治疗了)。同样,如果套件插入一个 当前项目之前的序列中的项目,当前项目将是 下一次循环再次治疗。