python - 从一个列表中删除另一个列表的元素,同时保留重复项

标签 python performance algorithm

基本上我想要的是:

>>> a = ["a","a","b","c","c","c","d","e","f"]
>>> b = ["a","b","c","d","e","f"]
>>> #Do something, something like a - b
>>> result = ["a","c","c"]

我想这样做的原因是,我加入了一堆偏好列表,并想在众多列表中找出哪一个是常见的。它们在列表 a 中出现的次数越多(因为更多的列表包含该元素),我对此的重视程度就越高

最佳答案

您确实在寻找多重集。使用 collections.Counter() ,多重集的 Python 实现:

from collections import Counter

acount = Counter(a)
bcount = Counter(b)
result = list((acount - bcount).elements())

演示:

>>> from collections import Counter
>>> a = ['a', 'a', 'b', 'c', 'c', 'c', 'd', 'e', 'f']
>>> b = ['a', 'b', 'c', 'd', 'e', 'f']
>>> Counter(a) - Counter(b)
Counter({'c': 2, 'a': 1})
>>> list((Counter(a) - Counter(b)).elements())
['a', 'c', 'c']

不过,您可能希望保留 Counter() 实例;但如果您需要它,Counter.elements() 方法会生成一系列元素乘以它们的计数,以再次产生您想要的输出。

关于python - 从一个列表中删除另一个列表的元素,同时保留重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580032/

相关文章:

algorithm - 所有可能的总和

python - 如何将覆盖率结果与 tox 结合起来?

python - CVXPY安装问题

python - 如何导入带有虚线路径的模块?

python - 精度比 gridsearchCV 低

javascript - MongoDB 数据建模性能

c++ - FFMpeg vs. OpenCV 格式转换/简单转换

c++ - 全局变量减慢代码

algorithm - 以前在哪里介绍过这种聚类搜索算法?

regex - 尽可能快地从众多正则表达式中选择正确正则表达式的算法