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