Python,为什么这个程序打印出来的列表里还会有一个2,不应该遍历了一遍都删除了吗?

a=[1,1,2,2,3,3,3,3]
for i in a:
if i==2:
a.remove(2)
print(a)

a.remove(2)需要向右缩进一格,属于if内。

a=[1,1,2,2,3,3,3,3]
for i in a:
    if i==2:
        a.remove(2)
print(a)

img

做过remove索引变掉了。  for i in a[:] 加一个[:]就可以以

a=[1,1,2,2,3,3,3,3]
for i in a[:]:
    if i==2:
        a.remove(2)
print(a)

 

移除了一个元素之后其后面元素的索引值都会减一,列表长度也会减一。
但循环索引只会加1,不会跟着减1。这样会跳过一个元素.
比如一开始循环索引值是0,移除了索引值是0的元素之后,原来索引值为1的元素的索引值减一变成0。原来索引值为2的元素的索引值减一变成1。
下一次循环索引加1。移除索引值是1的元素(原来索引值为2的元素),原来索引值为1的元素就被跳过了。
所以在移除操作时要倒着循环

a=[1,1,2,2,3,3,3,3]
for i in range(len(a)-1,-1,-1):
    if a[i]==2:
        a.pop(i)
print(a)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img