繁体   English   中英

Python-如何从列表中删除类似的元素?

[英]Python - How to remove similar elements from a list?

例如,我有一个列表:

L = [1, 2, 2, 3, 1, 1, 6, 10, 1, 3]

我想从列表中删除所有1,这样我将得到:

L = [2, 2, 3, 6, 10, 3]

我尝试遍历列表,然后删除该元素(如果它等于我要删除的元素)(在这种情况下为1),但事实证明您无法同时遍历和删除列表中的内容,因为它弄乱了数数。 我想出的最好的办法就是构造一个不包含任何1的新列表L2,然后将其放入L,但是有没有解决方案,仅涉及对L进行突变?

但是有没有只涉及L突变的解决方案?

您可以遍历List- L[:]的副本,然后从L删除元素。 这不会搞乱计数。

如果您确实不想创建新列表,则必须使用range(len(L) - 1, -1, -1)进行反向迭代,但这不再是“ Pythonic”了。

>>> for x in L[:]:  
...     if x == 1:
...         L.remove(x)
... 
>>> L
[2, 2, 3, 6, 10, 3]

但是,您也可以使用List Comprehension

>>> L = [1, 2, 2, 3, 1, 1, 6, 10, 1, 3]
>>> L[:] = [x for x in L if x != 1]
>>> L
[2, 2, 3, 6, 10, 3]

使用内置的过滤器:

>>> L = [1, 2, 2, 3, 1, 1, 6, 10, 1, 3]
>>> filter(lambda x: x is not 1, L)
[2, 2, 3, 6, 10, 3]

或者您可以将其分配回L

>>> L = [1, 2, 2, 3, 1, 1, 6, 10, 1, 3]
>>> L = filter(lambda x: x is not 1, L)
>>> L
[2, 2, 3, 6, 10, 3]

您还可以将此概念包装到方法中,以便能够指定要包含/排除的项目列表:

def exclude(collection, exclude_list):
    return filter(lambda x: x not in exclude_list, collection)

def include(collection, include_list):
    return filter(lambda x: x in include_list, collection)

>>> L = [1, 2, 2, 3, 1, 1, 6, 10, 1, 3]
>>> L = exclude(L, [1])
>>> L
[2, 2, 3, 6, 10, 3]

如果您不想更改列表或生成列表的任何新副本。 您可以从头到尾循环使用索引:

>>> for i in range(len(L)-1, -1, -1):
...     if L[i] == 1:
...         del L[i]

在不复制列表的情况下在python中这样做很尴尬...

这样做无需复制。

a = range(6)  # Some array [0,1,2,3,4,5]
i=0
while i < len(a):
  if a[i] == 4:
    del a[i]
  else:
    i += 1

输出值

>>> a
[0, 1, 2, 3, 5]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM