Python 列表差异与出现次数

标签 python list comparison

有没有用python内置的列表减法/列表差异函数? 我知道如何编写这样的函数,因此无需解释。但由于这是常见的事情,我想知道是否已经内置了这样的功能。

我有两个排序列表,每个列表可能包含相同元素的多个副本。

我想知道列表之间的区别是什么,考虑到出现的次数(设置差异是不够的)

例如:

l1 = [1,1,2,3,5,6]
l2 = [1,2,8,9]

diff (l1, l2) 
[1,3,5,6]

diff (l2,l1)
[8,9]

最佳答案

也许你可以使用 Counter类。


示例:

l1 = [1,1,2,3,5,6]
l2 = [1,2,8,9]
from collections import Counter

print Counter(l1) - Counter(l2)
print Counter(l2) - Counter(l1)

结果:

Counter({1: 1, 3: 1, 5: 1, 6: 1})
Counter({8: 1, 9: 1})


编辑:

要从 Counter 对象中获取列表,您可以使用以下代码:

from itertools import chain
r = Counter(l2) - Counter(l1)
list(chain(*[p*[k] for k,p in r.items()]))

我只是从类似字典的 Counter 中创建一个列表列表,然后使用 list(chain(* ... )) 将其展平为一个列表。

关于Python 列表差异与出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774751/

相关文章:

java - 是否有 Java 实用程序可以对两个对象进行深入比较?

python - 一个列表中的 "pair"字符串与另一个列表中的整数(在 python 中)的最简单方法是什么?

python - tensorflow 中的权重初始化

python - 将函数的输出返回到字典

c# - 限制 2 个单独列表的组合计数 - C#

java - Java 中的克隆列表

r - 更改 R 中数据框列表中的列值

适合 Python 程序员的 PHP?

java - 确定嵌套 Foreach 循环中的当前对象是否相同

php - MySQL 日期比较返回不同的结果