マルチセットのリストを 1 つのマルチセットにマージする Python の方法は何ですか?
たとえば、
from multiset import Multiset
set1 = Multiset('aab')
set2 = Multiset('abc')
ls = [set1, set2]
セットの使用に基づいて、私の推測は次のようになります:
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})
2
マルチセットとは何ですか?
– user2357112
2020 年 9 月 3 日 8:29
…そして「エラー」とは何ですか?正確には?
– クラウス D.
2020 年 9 月 3 日 8:31
1
次のような出力が必要な場合は、{'a': 3, 'b': 2, 'c': 1} を使用できます。 collections.Counter
– デッドショット
2020 年 9 月 3 日 8:35
誰かがこれを閉じた??どの部分が不明瞭ですか?
– ジェームズ・ハーショーン
2020 年 9 月 3 日 10:33
@user2357112supportsMonica 数学的意味は、各要素が繰り返しを持つことができるセットであり、その数は要素の多重度と呼ばれます: en.wikipedia.org/wiki/Multiset
– ジェームズ・ハーショーン
2020 年 9 月 4 日 7:42
------------------------
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})