Python列表与发生次数的差异

use*_*366 3 python comparison list

是否有使用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]
Run Code Online (Sandbox Code Playgroud)

slo*_*oth 8

也许你可以使用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)
Run Code Online (Sandbox Code Playgroud)

结果:

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


编辑:

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

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

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