python遍历列表删除多个元素的坑

如下代码,遍历列表,删除列表中的偶数时,结果与预期不符。

a = [11, 20, 4, 5, 16, 28]
for i in a:
    if i % 2 == 0:
        a.remove(i)
print a

得到的结果为:

>>> [11, 4, 5, 28]

其中偶数4和28都没有删掉,原因在于for循环在遍历列表时,是按照元素的索引依次访问元素的,当删除其中一个元素后,后面的元素会依次前移,即就是删除索引1处的元素20后,将访问索引为2的元素,但由于删除元素20之后,后面的元素会依次前移,元素4的索引就成了1,就不会访问了,此时访问到的元素就是5,元素28没有删掉的原因也是一样。

 

为了解决这个问题,比较好的方法有下面两种:

倒序循环遍历

a = [11, 20, 4, 5, 16, 28]
for i in range(len(a)-1, -1, -1):
    if a[i] % 2 == 0:
        del a[i]

filter函数

a = [11, 20, 4, 5, 16, 28]
b = filter(lambda x: x % 2 != 0, a)

我们要删除的是偶数,保留的是奇数,所以把奇数过滤出来保存到新的列表b中。

posted @ 2019-03-17 01:35  永恒de记忆  阅读(4567)  评论(0编辑  收藏  举报