이번 포스팅에서는 Python 세트를 알아볼게요. 세트는 집합을 표현하는 자료형으로 수학에서 배우는 집합과 같은 개념이라고 보시면 됩니다. 즉 합집합, 교집합, 차집합 같은 연산이 가능하다는 말이죠. 자, 이제부터 세트에 대해서 정리해보겠습니다.

세트
세트 정의 및 특징
{ }(중괄호)안에 값을 자장하여 ,(콤마)로 구분하여 사용한다.
순서가 정해지지않아 출력시 마다 요소의 순서가 다릅니다.
중복된 요소가 존재할 수 없습니다.
특정 요소 출력이 불가능하다.
세트내 특정 값 존재 유무 확인
값 in 세트 : 세트내 값이 있으면 True
값 not in 세트 : 세트내 값이 없으면 True
setgroup = {1,2,3,4,5,6}
print( 1 in setgroup )
>>>True
print( 7 in setgroup )
>>>False
print( 1 not in setgroup )
>>>False
print( 7 not in setgroup )
>>>True
set함수를 사용한 세트만들기
set(iterable) : iterable를 요소로 사용한 세트 자료형을 만든다. 미지정시 빈 세트를 생성한다.
* iterable은 반복 가능한 객체
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">setgroup = set('string')
print(setgroup)
>>>{'s','t','r','i','n','g'}
setgroup = set(range(5))
print(setgroup)
>>{0,1,2,3,4}
setgroup = set() # 빈 세트 생성시 setgroup = {}라고 선언하면 딕셔너리로 생성되니 주의
print(setgroup)
>>>set()
</pre>
집합연산
합집합(union) – 모든 요소를 한 그룹으로 합친다. (=OR연산자)
세트1 | 세트2 또는 set.union(세트1, 세트2) : 두 세트의 합집합을 구한다.
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1,2,3}
set2 = {3,4,5}
print( set1 | set2 )
>>>{1,2,3,4,5} # 세트는 중복값 제거
print(set.union(set1,set2))
>>>{1,2,3,4,5}</pre>
교집합(intersection) – 공통된 요소들만 추출한다. (=AND연산자)
세트1 & 세트2 또는 set.intersection(세트1, 세트2) : 두 세트의 교집합을 구한다.
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1,2,3}
set2 = {3,4,5}
print( set1 & set2 )
>>>{3}
print(set.intersection(set1, set2))
>>>{3}</pre>
차집합(difference) – 선 집합에서 후 집합과 공통된 요소를 제거하고 추출한다. (=뺄셈연산자)
세트1 – 세트2 또는 set.difference(세트1, 세트2) : 두 세트의 차집합을 구한다.
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1,2,3}
set2 = {3,4,5}
print( set1 - set2 )
>>>{1,2}
print(set.difference(set1,set2))
>>>{1,2}</pre>
대칭차집합(symmetric difference) – 두 세트의 공통된 요소를 제외한 나머지 요소를 추출한다.(=XOR연산자)
세트1 ^ 세트2 또는 set.symmetric_difference(세트1,세트2)
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1,2,3}
set2 = {3,4,5}
print( set1 ^ set2 )
>>>{1,2,4,5}
print(set.symmetric_difference(set1,set2))
>>>{1,2,4,5}</pre>
세트 연산 후 할당하기
세트1 |= 세트2 또는 세트1.update(세트2) : 두 세트의 합집합을 세트1에 할당한다.
세트1 &= 세트2 또는 세트1.intersection_update(세트2) : 두 세트의 교집합을 세트1에 할당한다.
세트1 -= 세트2 또는 세트1.difference_update(세트2) : 두 세트의 차집합을 세트1에 할당한다.
세트1 ^= 세트2 또는 세트1.symmetric_difference_update(세트2) : 두 세트의 대칭차집합을 세트1에 할당한다.
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1,2,3}
set2 = {3,4,5}
set1 |= set2 # set1.update(set2)
print(set1)
>>> {1,2,3,4,5}
set1 = {1,2,3}
set2 = {3,4,5}
set1 &= set2 # set1.intersection_update(set2)
print(set1)
>>> {3}
set1 = {1,2,3}
set2 = {3,4,5}
set1 -= set2 # set1.difference_update(set2)
print(set1)
>>> {1,2}
set1 = {1,2,3}
set2 = {3,4,5}
set1 ^= set2 # set1.symmetric_difference_update(set2)
print(set1)
>>> {1,2,4,5}</pre>
부분집합과 상위집합 확인하기
세트1 <= 세트2 또는 세트1.issubset(세트2) : 세트1은 세트2의 부분집합이다.
세트1 < 세트2 : 세트1은 세트2의 진부분집합이다.(세트1 != 세트2)
세트1 >= 세트2 또는 세트1.issuperset(세트2) : 세트1은 세트2의 상위집합이다.
세트1 > 세트2 : 세트1은 세트2의 진상위집합이다.(세트1 != 세트2)
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1, 2, 3, 4}
set2 = {1, 2, 3, 4}
print(set1 <= set2) # set1.issubset(set2)
>>>True
set1 = {1, 2, 3, 4}
set2 = {1, 2, 3, 4, 5}
print(set1 < set2)
>>>True
set1 = {1, 2, 3, 4}
set2 = {1, 2, 3, 4}
print(set1 >= set2) # set1.issuperset(set2)
>>>True
set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 4}
print(set1 > set2)
>>>True
</pre>
세트간 겹치는 요소 존재 확인
세트1.isdisjoint(세트2) : 세트1과 세트2 사이에 겹치는 요소가 없으면 True
<pre data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">set1 = {1, 2, 3, 4}
set2 = {5, 6, 7, 8}
print(set1.isdisjoint(set2))
>>>True
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
print(set1.isdisjoint(set2)) # set1과 set2의 3, 4가 겹침
>>>False</pre>
세트 조작함수
| 함수 | 내용 |
| add(요소) | 세트에 요소를 추가한다. |
| remove(요소) | 세트에서 특정 요소를 삭제하고 없으면 에러를 발생시킨다. |
| discard(요소) | 세트에서 특정 요소를 삭제하고 없으면 넘어간다. |
| pop() | 세트에서 임의의 요소를 삭제하고 해당 요소를 반환한다. |
| clear() | 세트에서 모든 요소를 삭제한다. |
| len(세트) | 세트의 요소 개수를 구한다. |



