python中列表删除满足条件元素的方法
问题的产生
最近的开发中遇到的问题为:需要删除python中list中满足条件的元素,例如,删除【1,2,3,4,5】中不是4的元素:1
2
3
4
5
6#!/usr/bin/env python
l = [1,2,3,4,5]
for i in l :
if i != 4 :
l.remove(i)
print l
然后运行的结果是【2,4】,明显出错了,我们详细分析一下为什么:1
2
3
4
5
6
7#!/usr/bin/env python
l = [1,2,3,4,5]
for i in l :
print "i:%d" % i
if i != 4 :
l.remove(i)
print l
运行结果为:1
2
3
4
5
6i:1
[2, 3, 4, 5]
i:3
[2, 4, 5]
i:5
[2, 4]
遍历完1后直接到3,然后到5,2和4被跳过了;
推导原因如下:
list.remove(i)方法用于删除列表中等于i的第一个元素,这个方法不返回任何值,第一次删除后l变成[2,3,4,5],此时for循环的index增加为1;
第二次遍历时,直接遍历到3,删除3后,index变为2,l变为[3,4,5],然后删除3,依此类推;
##正确的方法##
1 使用Lambada表达式:1
2l = [1,2,3,4,5]
l = filter(lambda x:x !=4,l)
其中filter要求两个参数,第一个是规则函数,第二个参数要求输入序列,而lambda这个函数的作用就是产生一个函数,是一种紧凑小函数的写法
2 使用列表解析1
2l = [1,2,3,4,5]
l = [ i for i in l if i !=4]
3 建立新的list存放要删除的元素1
2
3
4
5
6
7l = [1,2,3,4]
dellist = []
for i in l:
if i != 4:
dellist.append(i)
for i in dellist:
l.remove(i)
##参考##
http://gmingzhe.blog.51cto.com/810664/165905
转载请标明文章出处。本文内容为实践后的原创整理,如果侵犯了您的版权,请联系我进行删除,邮件:yanhealth@163.com