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