한 세트에 다른 세트가 완전히 포함되어 있는지 확인하는 빠른 방법이 있습니까?
다음과 같은 것 :
>>>[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