티스토리 뷰

set이란?

set형은 집합자료형이라고도 합니다. 중복을 허용하지 않기 때문에 값들을 필터하는데 쓰이기도 하며 집합을 구할 때 많이 사용됩니다. 

set을 정의하기

set 자료형은 set()함수를 통해서 정의할 수 있습니다.


s = set("hello") #s는 {'h', 'e', 'l', 'o'}
s2 = set([1, 2, 3, 3, 4, 4, 5]) #s2는 {1, 2, 3, 4, 5}


또 다른 방법은 중괄호 안에 값을 기입하면 됩니다.


s = {'h', 'e', 'l','l', 'o'}
s2 = {1, 2, 3, 3, 4, 4, 5}


값을 확인해보세요. 중복되는 값들은 모두 사라지고 하나만 남습니다.

값을 추가하는 방법

set 자료형에 값을 추가하는 방법은 무엇이 있을까요? add()와 update()를 이용하면 값을 추가할 수 있습니다.

s.add('f') #s는 이제 {'e', 'o','h', 'f', 'l'} 입니다.
s.update('r') #s는 {'e', 'o', 'h', 'f', 'r', 'l'}입니다.
s.update('world') #s는 이제 {'e', 'o', 'h', 'f', 'd', 'r', 'l', 'w'} 입니다.


add()의 경우엔 하나의 값만 추가할 수 있지만 update()를 이용하면 여러개도 한번에 추가할 수 있습니다.

값을 제거하는 방법 

값을 추가했으니 제거하는 방법을 알아볼까요? 값을 제거할 땐 remove() 함수를 이용하면 됩니다.

s.remove('l')
#s는 {'e', 'o', 'h', 'f', 'd', 'r', 'w'} 입니다.


소괄호 안에 삭제할 값을 넣으면 해당 값을 set자료형에서 삭제합니다. 위의 소스코드를 실행하면 값에서 "l"이 사라진 것을 확인할 수 있습니다.

값에 접근하는 방법

set 자료형은 인덱스를 가지고 있지 않습니다. 순서를 가지고 있지 않다는 뜻입니다. 그렇다면 어떻게 값에 접근할 수 있을까요? set자료형을 리스트 등 인덱스를 가진 다른 자료형으로 바꾼 다음에 접근할 수 있습니다.

s_l = list(s)
s_l[:]
#['e', 'o', 'h', 'f', 'd', 'r', 'w']


list()함수를 통해서 set 자료형을 리스트로 바꿨습니다. 이제는 리스트에서 사용하던 인덱스, 슬라이싱 등을 통해서 값에 접근할 수 있습니다.

set자료형으로 교집합, 합집합, 차집합 구하기

우선 용어에 대한 정리를 해볼까요?

벤다이어그램두 개의 원이 있습니다.


교집합은 두개의 원이 겹치는 부분을 말합니다. 합집합은 두 원을 합친 부분, 차집합은 한 원에서 다른원과 겹치는 부분을 뺀 것을 말합니다. 포스팅의 맨 처음 부분에 set자료형은 집합을 구할 때 많이 사용한다고 표현했습니다. set 자료형을 통해서 교집합, 합집합, 차집합을 구해보도록 하겠습니다.


s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}


s1이라는 집합과 s2라는 집합에서 공통되는 부분(교집합)은 무엇인가요? 네! 4, 5입니다. 이를 코드로 나타내보겠습니다.


s1 & s2 #{4, 5}
s1.intersection(s2) #{4, 5}


&와 intersection() 메소드를 통해서 교집합을 구할 수 있습니다.


s1과 s2를 합치면(합집합) 어떻게 될까요? {1, 2, 3, 4, 5, 6, 7, 8} 이라는 집합이 될 것입니다.


s1 | s2 #{1, 2, 3, 4, 5, 6, 7, 8}
s1.union(s2) #{1, 2, 3, 4, 5, 6, 7, 8}


|와 union() 메소드를 통해서 합집합을 구할 수 있습니다.


s1에서 s2와 겹치는 부분을 제외하면(차집합) 무엇이 남을까요? {1, 2, 3}이 남습니다.


s1 - s2 #{1, 2, 3}
s1.difference(s2) #{1, 2, 3}


-와 difference()메소드를 통해서 차집합을 구할 수 있습니다.



다음 포스팅에서는 조건문, 반복문 등을 배워보도록 하겠습니다.



공감은 제작자에게 큰 힘이 됩니다.


'Backend-dev > python' 카테고리의 다른 글

파이썬의 반복문(for, while)  (0) 2018.04.03
파이썬의 조건문(if)  (1) 2018.04.02
파이썬 자료형 딕셔너리 알아보기  (0) 2018.03.30
파이썬의 자료형 튜플 알아보기  (0) 2018.03.30
파이썬의 자료형 list  (0) 2018.03.27
댓글