在Python中需要保持重复时比较两个列表中的元素

2024-05-31 23:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较两份单子。我想在第一个列表中查找在第二个列表中没有相应条目的元素(顺序无关紧要):

a = ['hi', 'hi', 'bye', 'hi']
b = ['hi', 'hi', 'bye']

所以我希望输出是

^{pr2}$

因为第一个列表中有一个额外的“hi”,而在第二个列表中没有出现。在

如果我执行the usual techniques之一,我可以使用列表理解:

[x for x in a if x not in b]

这给了我[],这不是我想要的。在

我尝试过使用set运算符,这有相同的结果,因为该操作将列表的成员减少到唯一性。在

这似乎是一个简单的操作。我需要先枚举列表中的每个元素,然后创建元组进行比较吗?我需要把它们写进反字典吗?当我只想对列表中的元素进行简单的比较时,所有这些听起来有点过分了!在


Tags: thein目的元素列表forif顺序
2条回答

您可以通过while循环检查每个项目,而不需要任何导入即可完成此操作:

a = ['hi', 'hi', 'bye', 'hi']
b = ['hi', 'hi', 'bye']
c = []
while a:
    # Get first item (and remove).
    item = a.pop(0)
    if item in b:
        b.remove(item)
    else:
        c.append(item)

print c

Counter对象支持多集操作:

>>> from collections import Counter
>>> a = ['hi', 'hi', 'bye', 'hi']
>>> b = ['hi', 'hi', 'bye']
>>> Counter(a) - Counter(b)
Counter({'hi': 1})

从计数器重建列表:

^{pr2}$

相关问题 更多 >