【问题标题】:Remove items from a list if it is in another list while keeping the duplicate - Python如果它在另一个列表中,则从列表中删除项目,同时保留重复项 - Python
【发布时间】:2013-02-07 23:27:27
【问题描述】:

如果项目在另一个列表中,如何从列表中删除项目,同时保留重复项?

我已经成功了,但是有更快的方法吗?

x = [1,2,3,4,7,7,5,6,7,8,8]
y = [1,4,5,6,8,9]
z = []
for i in x:
  if i not in y:
   z.append(i)
print z

正确的输出:

[2, 3, 7, 7, 7]

或者,列表推导式也可以,但这是唯一的方法吗?

x = [1,2,3,4,7,7,5,6,7,8,8]
y = [1,4,5,6,8,9]
z = [i for i in x if not in y]

虽然使用 set 快很多,但它不会保留重复:

x = [1,2,3,4,7,7,5,6,7,8,8]
y = [1,4,5,6,8,9]
print list(set(x) - set(y))

集合减法给出了丢失重复项的输出:

[2, 3, 7]

【问题讨论】:

  • 你可以为y使用一个集合。
  • Dominic 意味着您可以将 set_y = set(y) 放在列表理解之外,这样您就不会一遍又一遍地创建集合
  • 还有itertools.ifilterfalse(set(y).__contains__, x)。它应该相当快。
  • set_y = set(y); z = [v for v in x if v not in set_y] 应该不会慢很多。

标签: python list set list-comprehension list-comparison


【解决方案1】:

如果顺序不重要

>>> x = [1,2,3,4,7,7,5,6,7,8,8]
>>> y = [1,4,5,6,8,9]
>>> from collections import Counter
>>> count=Counter(x)
>>> for i in y:
...     del count[i]
... 
>>> list(count.elements())
[2, 3, 7, 7, 7]

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2011-09-29
    • 2013-08-03
    相关资源
    最近更新 更多