[python] 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


답변

한 가지 옵션은 그대로 둡니다. 빼기 :

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


답변

set.issubset()또는 set.issuperset()(또는 연산자 기반 대응 : <=>=)을 사용할 수 있습니다 . 메소드는 세트뿐만 아니라 모든 iterable 을 인수로 허용 합니다 .

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


답변

집합이 다른 집합의 하위 집합으로 의심되고이 두 집합을 함께 교차하는 경우 하위 집합이면 결과는 자신과 동일합니다.

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


답변

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


답변

아래 함수는 mainlist에 하위 목록이 완전히 포함되지 않은 경우 0을 반환하고 완전히 포함 된 경우 1을 반환합니다.

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