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中。