bar*_*gaj 0 python algorithm performance
基本上我想要的是这个:
>>> 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"]
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因,我正在加入一系列偏好列表,并希望找到哪一个在很多列表中很常见.它们出现在列表a中的次数越多(因为更多列表具有该元素),我就越重视它
你正在寻找多重集合.使用collections.Counter(),multiset的Python实现:
from collections import Counter
acount = Counter(a)
bcount = Counter(b)
result = list((acount - bcount).elements())
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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']
Run Code Online (Sandbox Code Playgroud)
Counter()但是,您可能希望保留实例; 但是如果你需要它,该Counter.elements()方法会生成一系列元素乘以其计数,以再次产生所需的输出.