이번 포스팅에서는 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(세트) | 세트의 요소 개수를 구한다. |