文章目录
  1. 1. 问题的产生

问题的产生

最近的开发中遇到的问题为:需要删除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
6
i: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
2
l = [1,2,3,4,5]
l = filter(lambda x:x !=4,l)

其中filter要求两个参数,第一个是规则函数,第二个参数要求输入序列,而lambda这个函数的作用就是产生一个函数,是一种紧凑小函数的写法

2 使用列表解析

1
2
l = [1,2,3,4,5]
l = [ i for i in l if i !=4]

3 建立新的list存放要删除的元素

1
2
3
4
5
6
7
l = [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

文章目录
  1. 1. 问题的产生