在python中添加多集列表

问题描述

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})