有人会遇到这种问题,遍历列表,想删除列表中的某几个元素,执行后发现有些并没有删除到,
比如以下代码
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]