본문 바로가기

파이썬/사용법

[python] 집합(set) 완전 정복 - 선언부터 집합 연산까지

안녕하세요! 이번 글에서는 파이썬의 집합(SET)에 대해서 알아보려고 합니다.

안녕하세요 set은 sequence type이 아니고 unordered collection 인 data type입니다.

파이썬은 수학적인 집합 연산을 제공하고 있습니다.

오늘은 집합의 선언과 기능 그리고 특이점을 중심으로 글을 작성해 보겠습니다.

 

1) 집합 선언하기

집합은

name = {value1,value2}

이런식으로 생성합니다.

name = set() # 변수가 하나일 때 사용 

name = {value1, value2,value3} # 변수가 여러 개 일 때 사용

 

>>> a = set() # 값이 하나일 때만 사용(iterable한 객체 분해 용도로 사용하는 듯)
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} # 값이 여러개 일 때 사용

>>> type(a)
<class 'set'>
>>> type(basket)
<class 'set'>

>>> # fast membership testing
>>> 'orange' in basket
True
>>> print('crabgrass' in basket) 
False

2) 특이점 

집합은 순서도 없고 중복도 없습니다.

실제로 출력을 해보면 매번 순서가 다르게 나타날 것입니다

iterable 한 객체 1개를 분해를 하고싶다면 set() 안에 집어넣는 것도 좋은 방법입니다.

>>> a = set('aaabbbcccdddeeefff')
>>> b = set('dddeeefffggghhhiii')

>>> a
{'f', 'b', 'c', 'e', 'a', 'd'}

>>> b
{'f', 'i', 'e', 'h', 'g', 'd'}

3) 집합 연산 지원

집합과 관련된 연산을 지원합니다.

union, intersection, difference, symmetric difference 등 다양한 연산을 지원합니다.

 

3-1) 합집합

>>> a|b
{'f', 'b', 'c', 'i', 'e', 'a', 'h', 'g', 'd'}
>>> a.union(b)
{'f', 'b', 'c', 'i', 'e', 'a', 'h', 'g', 'd'}

3-2) 교집합

>>> a&b
{'e', 'f', 'd'}
>>> a.intersection(b)
{'e', 'f', 'd'}

3-3) 차집합

>>> a-b
{'a', 'c', 'b'}
>>> a.difference(b)
{'a', 'c', 'b'}

3-4) 대칭 차집합 

>>> a^b
{'a', 'b', 'h', 'c', 'i', 'g'}
>>> a.symmetric_difference(b)
{'a', 'b', 'h', 'c', 'i', 'g'}

 

4) set comprehension

>>> c = {x for x in 'aaabbbcccdddeeefff' if x not in 'abc'}
>>> c
{'e', 'f', 'd'}

리스트 컴프리헨션과 마찬가지로 집합 컴프리헨션도 지원합니다.

 

정리) 

집합은 선언 방법이 2가지가 있다.1) name = set()2) name = {value1,value2,value3...}1번은  값이 하나일 때 사용해주고 2번은 값이 여러개일 때 사용해준다. 

 

집합은 중복을 허용하지않는다.

집합은 순서가 없다.

집합은 순서가 없기 때문에 인덱싱, 슬라이싱이 불가하다.

 

또한 여러가지 집합 연산을 지원한다.

합집합   교집합   차집합   대칭차집합 등

a|b           a&b         a-b             a^b

 

set comprehension을 지원한다.

괄호는 {} 대괄호로

마치면서)

파이썬 공식 문서에서 집합과 예제를 찾아보시면 더욱 자세한 정보를 얻을 수 있습니다. 

다음 글에서도 유용한 파이썬 팁과 기능을 소개하도록 하겠습니다

감사합니다.