问题描述
将multiset
列表合并为单个多集的pythonic方法是什么?
例如,
from multiset import Multiset
set1 = Multiset('aab')
set2 = Multiset('abc')
ls = [set1,set2]
基于使用set
的猜测,我的猜测是:
Multiset.add(*ls)
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "/usr/local/lib/python3.7/site-packages/multiset.py",line 931,in add
self._elements[element] += multiplicity
TypeError: unhashable type: 'Multiset'
是否有比for
循环更好的方法,如下所示?
def add_multisets(ls):
result = Multiset()
for i in ls:
result += i
return result
>>> add_multisets(ls)
Multiset({'a': 3,'b': 2,'c': 1})
解决方法
您可以使用Multiset.combine(* ls) 即
from multiset import Multiset
set1 = Multiset('aab')
set2 = Multiset('abc')
ls = [set1,set2]
x = Multiset.combine(*ls)
print(x) # Multiset({'a': 3,'b': 2,'c': 2})