首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

剔除list中所有指定的元素

2013-02-24 
删除list中所有指定的元素 c[1, 1, 2, 3, 3, 3, 3, 4, 4]我想删除c中所有的元素3,结果应该是: c[1,

删除list中所有指定的元素
>>> c
[1, 1, 2, 3, 3, 3, 3, 4, 4]
我想删除c中所有的元素3,结果应该是:
>>> c
[1, 1, 2, 4, 4]

我的代码是:
ctr = c.count(c)
while ctr > 0 :
     ctr = ctr - 1
     c.remove(3)

但感觉效率有点慢,list中该元素有几个就需要遍历几次,请问有没有更高效的方法? list
[解决办法]

#!/usr/bin/env python

def deleteAll(l, n):
    while True:
        try:
            l.remove(n)
        except:
            return

c = [1, 1, 2, 3, 3, 3, 3, 4, 4]
print c

deleteAll(c, 3)
print c


[1, 1, 2, 3, 3, 3, 3, 4, 4]
[1, 1, 2, 4, 4]
[解决办法]
个人的理解是:底层的实现是用数组而不是链表方式,一次删除需要把后头的所有数据向前挪动,所以频繁删除的效率还不如就遍历一趟复制一个新列表出来...

c = [i for i in c if i != 3]



[解决办法]
引用:
c = [i for i in c if i != 3]

+1
[解决办法]
2,3楼说的都很对
这里用的是列表解析的方法
还可以考虑用生成器表达式 速度快点 就是语法看起来晦涩些

热点排行