Pythonでマルチセットのリストを追加する

okwaves2024-01-25  8

マルチセットのリストを 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})

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。