我想比较两个列表。我想在第一个列表中找到在第二个列表中没有相应条目的元素(顺序无关紧要):
a = ['hi', 'hi', 'bye', 'hi']
b = ['hi', 'hi', 'bye']
所以我希望输出是
c = ['hi']
因为第一个列表中有一个额外的“hi”,它没有出现在第二个列表中。
如果我执行 the usual techniques 之一,我可以使用列表理解:
[x for x in a if x not in b]
这给了我 []
,这不是我想要的。
我已经尝试过使用 set
运算符,它具有相同的结果,因为该操作将列表的成员减少到唯一性。
这似乎是一个简单的操作。我是否需要先枚举列表中的每个元素,然后创建元组进行比较?我需要将它们放入 Counter dict 中吗?当我只想对列表中的元素进行简单比较时,所有这些听起来有点矫枉过正!
最佳答案
Counter对象支持多集操作:
>>> from collections import Counter
>>> a = ['hi', 'hi', 'bye', 'hi']
>>> b = ['hi', 'hi', 'bye']
>>> Counter(a) - Counter(b)
Counter({'hi': 1})
从计数器重建列表:
>>> list(counter.elements())
['hi']
关于python - 在 Python 中需要保留重复项时比较两个列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186416/