Python:看看一个集合是否完全包含另一个集合?

Nic*_*ner 71 python set

有没有快速的方法来检查一个集合是否完全包含另一个集合?

就像是:

>>>[1, 2, 3].containsAll([2, 1])
True

>>>[1, 2, 3].containsAll([3, 5, 9])
False
Run Code Online (Sandbox Code Playgroud)

dan*_*ben 113

这些是列表,但如果你真的是集合,你可以使用issubset方法.

>>> s = set([1,2,3])
>>> t = set([1,2])
>>> t.issubset(s)
True
>>> s.issuperset(t)
True
Run Code Online (Sandbox Code Playgroud)

对于列表,您将无法比检查每个元素做得更好.

  • 当我看到这个答案时,我有一种奇怪的dejavu感觉 (3认同)

Chr*_*heD 32

为了完整性:这相当于issubset(尽管可能有点不那么明确/可读):

>>> set([1,2,3]) >= set([2,1])
True
>>> set([1,2,3]) >= set([3,5,9])
False
Run Code Online (Sandbox Code Playgroud)


Eug*_*ash 7

您可以使用set.issubset()or set.issuperset()(或它们基于运算符的对应物:<=and >=)。请注意,这些方法将接受任何可迭代对象作为参数,而不仅仅是一个集合:

>>> {1, 2}.issubset([1, 2, 3])
True
>>> {1, 2, 3}.issuperset([1, 2])
True
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用运算符,则必须设置两个参数:

>>> {1, 2} <= {1, 2, 3}
True
>>> {1, 2, 3} >= {1, 2}
True
Run Code Online (Sandbox Code Playgroud)


Art*_*kiy 5

一个选项保持不变-减法:

>>> {1, 2} - {1, 2, 3}
set([])
>>> {1, 2, 3} - {1, 2}
set([3])
Run Code Online (Sandbox Code Playgroud)

基本上,您检查第一个列表中的哪些元素不在第二个列表中。

我发现它非常方便,因为您可以显示缺少的值:

>>> def check_contains(a, b):
...     diff = a - b
...     if not diff:
...         # All elements from a are present in b
...         return True
...     print('Some elements are missing: {}'.format(diff))
...     return False
...
>>> check_contains({1, 2}, {1, 2, 3})
True
>>> check_contains({1, 2, 3}, {1, 2})
Some elements are missing: set([3])
False
Run Code Online (Sandbox Code Playgroud)


Jor*_*lli 5

如果您怀疑一个集合是另一个集合的子集,并将这两个集合相交,如果它是一个子集,则结果等于它自己。

a = [2,1,3,3]
b = [5,4,3,2,1]
set(a).intersection(set(b)) == set(a)
>>True
Run Code Online (Sandbox Code Playgroud)

  • 为了理智起见,让“A = set(a)”和“B = set(b)”。然后这个比较可以有效地简化为“len(A.intersection(B)) == len(A)”。也就是说,集合本身*不需要*按元素进行比较;只需要比较这些集合的基数。然而,即使这种优化也可能不足以使这种方法变得更好。可读性显着提高且高效的“issubset()”和“&lt;=”方法几乎肯定是每个人都想要的。 (2认同)