본문 바로가기

코딩/파이썬 기초

파이썬 튜토리얼 030. 기본 데이터 타입, 셋 (set, 집합)

python : built-in types : set

기본 데이터 타입 set (셋, 집합)

파이썬은 기본 데이터 타입으로 set(셋, 집합)을 제공한다.

데이터 타입 셋은 리스트나 튜플과 같이 다수의 아이템을 저장하는데 사용한다.

데이터 타입 셋은 키워드 set 또는 딕셔너리와는 다르게 콜론을 사용하지 않는 괄호 "{", "}"를 이용해 정의한다.

데이터 타입 셋은 리스트나 튜플과는 다르게 동일한 값의 아이템은 하나만 저장한다.

데이터 타입 셋은 리스트나 튜플과는 다르게 리스트 같은 mutable (가변) 특성의 데이터는 저장할 수 없다.

 

예를 들어 데이터 타입 셋은 괄호 "{", "}"를 이용해 정의할 수 있고,

 

basket = {'apple', 'orange', 'pear', 'banana', 'apple', 'pear'}

 

또는 set 키워드를 이용해 정의할 수도 있다.

 

basket = set(['apple', 'orange', 'pear', 'banana', 'apple', 'pear'])
# or
basket = set(('apple', 'orange', 'pear', 'banana', 'apple', 'pear'))

 

아래의 예에서 알 수 있듯이

위 3가지 방식으로 정의한 basket 변수에는 문자열 'apple'과 'pear'가 하나만 저장되어 있다.

그리고 데이터 타입 셋 내 아이템은 리스트나 튜플과는 다르고 딕셔너리와는 유사하게 대입한 순서가 아닌 불규칙한 순서를 갖는다.

 

데이터 타입 셋 변수

 

아이템을 갖지 않는 셋은 괄호 "{", "}"가 아닌 키워드 set()으로 정의한다. 괄호를 사용하면 딕셔너리로 해석된다.

 

s1 = {}
s2 = set()
print(type(s1))
print(type(s2))

 

값을 갖지 않는 데이터 타입 셋 정의

 

데이터 타입 셋에 대하여 리스트나 튜플과 같이 인덱싱이나 슬라이싱은 사용할 수 없다.

 

basket = {'apple', 'orange', 'pear', 'banana', 'apple', 'pear'}
print(basket[0])

 

데이터 타입 셋에서 인덱싱 사용 결과

 

데이터 타입 셋은 다양한 메서드를 제공하며, 동일한 기능으로 몇 가지 연산자를 사용할 수도 있다.

 

  • -
  • |
  • &
  • ^
set_a = {1, 2, 3, 4, 5}
set_b = {      3,    5, 7, 9}

print(set_a - set_b)
print(set_a | set_b)
print(set_a & set_b)
print(set_a ^ set_b)

 

데이터 타입 셋에 연산자를 사용한 결과

 

리스트에 대하여 리스트 컴프리헨션이 지원되는 것처럼, 셋에 대해서도 셋 컴프리헨션이 지원된다.

 

s = {x for x in [1, 2, 3, 2, 3, 4, 3, 4, 5] if x % 2}
print(s)

 

셋 컴프리헨션