Python循环列表删除元素问题

时间:2022-08-08 07:47:31

有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到,

比如以下代码

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

从代码看主要就是想删除a列表中的 3 4 元素,

程序的结果是:

[1, 2, 3, 4, 5]

[1, 2, 4, 5]

结果不尽人意,原因是我们在遍历的时候

  • seek走到了3元素的位置
  • if判断remove 3  这个元素
  • 3这个位置删除后位置空出来了,后面的元素就往前移动,替代了3的位置
  • seek继续走到下一个,本来是4元素的,但是4元素往前移了,就错过了,seek走到了5元素的位置

避免这个这个问题的就需要避免for循环,当然上面的例子可以有很多方法去删除,但是当我们遇到一个不能避免for循环的情况,可以将要删除的元素存储到另外一个列表里面,最后一并删除.

a=[1,2,3,4,5]
d=[]
print(a)
for i in a:
if i==3 or i==4:
d.append(i)
for i in d:
a.remove(i)
print(a) #[1, 2, 3, 4, 5]
#[1, 2, 5]