python - 在 Python 中需要保留重复项时比较两个列表中的元素

标签 python list

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

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/

相关文章:

python - Fast NMS 算法抑制框不重叠

python - 连接python列表中的单个元素

java - 使用文件更新列表(Java swing)

python - 如何设置vsvars32环境变量?

python - 如何在 python 中迭代条件检查?

list - F# 列表包含

python - 如何展平 Pandas 数据框列中的列表?

list - F# : Writing a function that builds a list of tuples recursively, 语法错误

python - 如何在给定 gps 原点的情况下找到附近的点?

Python/Django : how do I determine the class to specify in an "except" statement?