假设我有一个列表 a
:
a = [[1, 1], [2, 2], [1, 1], [3, 3], [1, 1]]
有没有一种函数可以删除所有的 [1, 1]
实例?
如果您想就地修改列表,
a[:] = [x for x in a if x != [1, 1]]
使用列表推导式:
[x for x in a if x != [1, 1]]
where
很诱人,Ignacio,类比于SQL...但是它不起作用!你必须像我在答案中所做的那样拼写为if
。 - Alex Martelli谷歌找到了删除列表中所有项目,其中包括一些宝石般的内容。
from functools import partial
from operator import ne
a = filter(partial(ne, [1, 1]), a)
filter([1,1].__ne__, a)
有什么问题? - tzotlist
是有效的,但在 Python 2.x 中 __ne__
并不是 int
或某些其他类型的方法。这在 Python 3.x 中得到修复,但为了保持一致性... - ephemientdef remAll(L, item):
answer = []
for i in L:
if i!=item:
answer.append(i)
return answer
以下是对Alex Martelli答案的简单替代方案:
a = [x for x in a if x != [1,1]]
new_list = filter(lambda x: x != [1,1], a)
或者作为一个函数:
def remove_all(element, list):
return filter(lambda x: x != element, list)
a = remove_all([1,1],a)
或更普遍的说:
def remove_all(elements, list):
return filter(lambda x: x not in elements, list)
a = remove_all(([1,1],),a)
list.remove
已经实现了相应的功能,我可能会将这个函数命名为 removeall
。 - ephemientfilter([1,1].__ne__,a)
functools.partial(operator.ne,[1,1])
,因为(至少在Python 2.x中)其他类型(例如int
)并不都有__ne__
。但是在Python 3中似乎已经修复了这个问题:所有类型都派生自object
,而object
确实有__ne__
。 - ephemient纯Python无模块版本,或无列表推导式版本(更易理解?)
>>> x = [1, 1, 1, 1, 1, 1, 2, 3, 2]
>>> for item in xrange(x.count(1)):
... x.remove(1)
...
>>>
>>> x
[2, 3, 2]
也可以很容易地制作成一个def函数
def removeThis(li,this):
for item in xrange(li.count(this)):
li.remove(this)
return li
a[:]
而不是只有a
? - Raja = [1];b = a;a = [2];b == [1]
;a = [1];b = a;a[:] = [2];b == [2]
。 - ephemienta = ...
将名牌绑定到一个新对象上,但a[:]
则用新列表的内容替换a
绑定的列表中的所有项。 - wizzwizz4