Python循环列表删除元素问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python循环列表删除元素问题相关的知识,希望对你有一定的参考价值。

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

比如以下代码

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]

 



以上是关于Python循环列表删除元素问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 的 for 循环中删除列表元素? [复制]

Python——用for循环删除列表中的元素

为啥 Python for 循环在遍历列表副本并进行删除时会跳过元素? [复制]

13 个非常有用的 Python 代码片段

30 段 Python 实用代码

python——循环删除list深拷贝和浅拷贝