multiset是允许重复的集合。所以submultiset是每个元素包含更少或相同数量的子元素。
有没有办法在Python中表示和操作多集?
设置显然不适用于此。例如,下面的代码返回True,这不是我想要的,因为它将重复的字母作为一个字母。
{'h','h','h','e','e','e','e'}.issubset({'h', 'e'})
答案 0 :(得分:4)
我知道Python中multiset的最简单表示是collections.Counter
对象。它支持基本的集合操作(+
,-
,&
,|
),虽然它没有像issubset
这样的方法,但你可以模仿那些操作更简单的人。
例如,
>>> from collections import Counter
>>> big = Counter(list('hhheeee'))
>>> small = Counter(list('he'))
>>> big
Counter({'e': 4, 'h': 3})
检查我们的Counter" multiset" Counter({'e': 4, 'h': 3})
是多集Counter({'e': 1, 'h': 1})
的一个子集,
>>> not bool(big-small)
False
或者我们可以验证众所周知的添加规则
之类的内容>>> big | small == big + small - (big & small)
True
值得注意的是,Counter
不与C ++ std::multiset
具有相同的界面宽度,因此将其解释为等效结构并不会这是一个好主意。然而,对于某些操作来说它可以很方便。