如何检查多重集合的包含?

时间:2017-02-23 03:18:25

标签: python

multiset是允许重复的集合。所以submultiset是每个元素包含更少或相同数量的子元素。

有没有办法在Python中表示和操作多集?

设置显然不适用于此。例如,下面的代码返回True,这不是我想要的,因为它将重复的字母作为一个字母。

{'h','h','h','e','e','e','e'}.issubset({'h', 'e'})

1 个答案:

答案 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

或者我们可以验证众所周知的添加规则

之类的内容

enter image description here

>>> big | small == big + small - (big & small)
True

值得注意的是,Counter 与C ++ std::multiset具有相同的界面宽度,因此将其解释为等效结构并不会这是一个好主意。然而,对于某些操作来说它可以很方便。