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

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

就像是:

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

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

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

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

为了完整性:这相当于issubset (虽然可以说明不太明确/可读):

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

可能是有点矫枉过正,但又有另外一个变化:如果你交叉了两个集合,并且结果集合包含了候选子集的所有唯一条目,那么候选集合确实是一个子集。

换句话说,如果一个集合的基数等于由另一个集合相交的集合的基数,那么它是该集合的一个子集。

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

一个选项是保持不变 – 减法:

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

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

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