[python] “|”를 사용하지 않고 한 줄에 두 세트를 결합하는 방법

ST세트가 할당 되었다고 가정하십시오 . 결합 연산자를 사용하지 않고 |두 세트의 결합을 어떻게 찾을 수 있습니까? 예를 들어, 교차점을 찾습니다.

S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }

그래서 어떻게 사용하지 않고 한 줄에 두 세트의 합집합을 찾을 수 |있습니까?



답변

세트에 유니온 메소드를 사용할 수 있습니다. set.union(other_set)

새 세트를 반환합니다. 즉, 자체 수정되지 않습니다.


답변

or_별명을 사용할 수 있습니다 .

>>> from operator import or_
>>> from functools import reduce # python3 required
>>> reduce(or_, [{1, 2, 3, 4}, {3, 4, 5, 6}])
set([1, 2, 3, 4, 5, 6])


답변

원본 세트를 수정하는 것이 좋으면 (어떤 경우에는 할 수 있습니다) 다음을 사용할 수 있습니다 set.update().

S.update(T)

반환 값은입니다 None. 그러나 S원본 S과 의 합집합으로 업데이트됩니다 T.


답변

사용할 수 없습니다 또한 가정 s.union(t)에 해당하는 것은 s | t, 당신은 시도 할 수

>>> from itertools import chain
>>> set(chain(s,t))
set([1, 2, 3, 4, 5, 6])

또는 이해를 원한다면

>>> {i for j in (s,t) for i in j}
set([1, 2, 3, 4, 5, 6])


답변

가입하여 노동 조합을 의미하는 경우 다음을 시도하십시오.

set(list(s) + list(t))

그것은 약간의 해킹이지만, 더 좋은 라이너를 생각할 수는 없습니다.


답변

2 개의리스트가 있다고 가정하자

 A = [1,2,3,4]
 B = [3,4,5,6]

그래서 당신은 다음과 같이 A유니온 B을 찾을 수 있습니다

 union = set(A).union(set(B))

또한 교차로와 비 교차로를 찾으려면 다음과 같이하십시오.

 intersection = set(A).intersection(set(B))
 non_intersection = union - intersection


답변

다음과 같이 두 세트를 모두 하나로 압축을 풀 수 있습니다.

>>> set_1 = {1, 2, 3, 4}
>>> set_2 = {3, 4, 5, 6}
>>> union = {*set_1, *set_2}
>>> union
{1, 2, 3, 4, 5, 6}

*세트를 압축을 풉니 다. 포장 풀기는 iterable (예 : 세트 또는 목록)이 생성하는 모든 항목으로 표시되는 곳입니다. 이러한 수단은 상술 한 실시 예를 단순화 {1, 2, 3, 4, 3, 4, 5, 6}한 다음에 단순화 된 {1, 2, 3, 4, 5, 6}세트는 고유 항목만을 포함 할 수 있기 때문에있다.