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

时间:2010-05-04 13:55:39

标签: python set

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

类似的东西:

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

>>>[1, 2, 3].containsAll([3, 5, 9])
False

7 个答案:

答案 0 :(得分:102)

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

>>> s = set([1,2,3])
>>> t = set([1,2])
>>> t.issubset(s)
True
>>> s.issuperset(t)
True

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

答案 1 :(得分:28)

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

>>> set([1,2,3]) >= set([2,1])
True
>>> set([1,2,3]) >= set([3,5,9])
False

答案 2 :(得分:4)

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

>>> {1, 2} - {1, 2, 3}
set([])
>>> {1, 2, 3} - {1, 2}
set([3])

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

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

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

答案 3 :(得分:4)

可能有点矫枉过正,但另一种变化: 如果您相交两个集合,并且结果集合包含候选子集的所有唯一条目,则候选集确实是一个子集。

换句话说: 如果有问题的集合的基数等于其集合与其他集合相交的结果基数,那么它就是该集合的子集。

a = [2,1,3,3]
b = [5,4,3,2,1]
set(a).intersection(set(b)) == set(a)
>>True

答案 4 :(得分:0)

如果mainlist不包含子列表,则函数返回0,如果包含完整,则返回1。

def islistsubset(sublist,mainlist):
     for item in sublist:
             if item in mainlist:
                     contains = 1
             else:
                     contains = 0
                     break;
     return contains

答案 5 :(得分:0)

>>> set([1,2,3]).issuperset(set([2,1]))
True 
>>>    
>>> set([1,2,3]).issuperset(set([3,5,9]))
False

答案 6 :(得分:0)

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

>>> {1, 2}.issubset([1, 2, 3])
True
>>> {1, 2, 3}.issuperset([1, 2])
True

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

>>> {1, 2} <= {1, 2, 3}
True
>>> {1, 2, 3} >= {1, 2}
True