Python: See if one set contains another entirely?

前端 未结 7 1677
长情又很酷
长情又很酷 2020-12-13 05:11

Is there a fast way to check if one set entirely contains another?

Something like:

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

>>>[1, 2,         


        
相关标签:
7条回答
  • 2020-12-13 05:51

    If you suspect a set to be a subset of another, and intersect those two sets together, the result is equal to itself if it is a subset.

    a = [2,1,3,3]
    b = [5,4,3,2,1]
    set(a).intersection(set(b)) == set(a)
    >>True
    
    0 讨论(0)
  • 2020-12-13 05:56

    For completeness: this is equivalent to issubset (although arguably a bit less explicit/readable):

    >>> set([1,2,3]) >= set([2,1])
    True
    >>> set([1,2,3]) >= set([3,5,9])
    False
    
    0 讨论(0)
  • 2020-12-13 06:03

    One option is left untouched -- subtraction:

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

    Basically you check what elements in first list are not in second list.

    I found it very handy since you could show what values are missing:

    >>> 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
    
    0 讨论(0)
  • 2020-12-13 06:04
    >>> set([1,2,3]).issuperset(set([2,1]))
    True 
    >>>    
    >>> set([1,2,3]).issuperset(set([3,5,9]))
    False
    
    0 讨论(0)
  • 2020-12-13 06:05

    Below function return 0 if mainlist doesn't contains sublist fully and 1 if contains fully.

    def islistsubset(sublist,mainlist):
         for item in sublist:
                 if item in mainlist:
                         contains = 1
                 else:
                         contains = 0
                         break;
         return contains
    
    0 讨论(0)
  • 2020-12-13 06:09

    You can use either set.issubset() or set.issuperset() (or their operator based counterparts: <= and >=). Note that the methods will accept any iterable as an argument, not just a set:

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

    However, if you use operators, both arguments must be sets:

    >>> {1, 2} <= {1, 2, 3}
    True
    >>> {1, 2, 3} >= {1, 2}
    True
    
    0 讨论(0)
提交回复
热议问题