Python 세트 문법 알아보기

이번 포스팅에서는 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 &amp; 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 &amp;= 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 &lt;= set2)  # set1.issubset(set2)
>>>True
set1 = {1, 2, 3, 4}
set2 = {1, 2, 3, 4, 5}
print(set1 &lt; 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(세트)세트의 요소 개수를 구한다.