이미지 출처: https://wikidocs.net/192339
오늘은 마지막으로 파이썬 자료형 집합을 알아보겠습니다.
집합 사용법
파이썬에서 집합(Set)은 고유한 요소들의 모임으로, 순서가 없고 중복된 요소를 포함하지 않는 데이터 구조입니다. 집합은 수학적 집합의 개념을 반영하여, 요소의 중복을 허용하지 않고, 다양한 집합 연산을 지원합니다.
a = set() b = set([1, 2, 3, 4])# set 안에 원소를 리스트 형태로 넣어준다. c = set([1, 4, 5, 6]) d = set([1, 2, 'Pen', 'Cap', 'Plate']) e = {"foo", 'bar', 'baz', 'foo', 'qux'} # key가 없다면 set이다. f = {42, 'foo', (1, 2, 3), 3.141592} # 서로다른 자료형도 들어갈 수 있다. print('a - ', type(a), a, 2 in a) >>> a - <class 'set'> set() False print('b- ' , type(b), b) >>> b- <class 'set'> {1, 2, 3, 4} print('c - ', type(c), c) >>> c - <class 'set'> {1, 4, 5, 6} print('d - ', type(d), d) >>> d - <class 'set'> {1, 2, 'Pen', 'Cap', 'Plate'} print('e - ', type(e), e) >>> e - <class 'set'> {'bar', 'foo', 'baz', 'qux'} print('f - ', type(f), f) >>> <class 'set'> {42, 3.141592, 'foo', (1, 2, 3)} --------------------------------------------------------------------- # 튜플 변환(set -> tuple) t = tuple(b) print('t - ', type(t), t) >>> t - <class 'tuple'> (1, 2, 3, 4) print('t - ', t[0], t[1:3]) >>> t - 1 (2, 3) --------------------------------------------------------------------- # 리스트 변환(set -> list) l = list(c) >>> l - [1, 4, 5, 6] l2 = list(e) >>> l2 - ['foo', 'bar', 'baz', 'qux'] --------------------------------------------------------------------- # 길이 print(len(a)) >>> 0 print(len(b)) >>> 4 print(len(c)) >>> 4 print(len(d)) >>> 5 print(len(e)) # 중복안되기에 길이가 4가 나온다. >>> 4 print(len(f)) >>> 4
집합 자료형은 파이썬에서 다양한 상황에서 유용하게 활용될 수 있습니다. 주요 활용 사례로는 중복 제거, 데이터 집합 간의 관계 파악, 집합 연산 수행 등이 있습니다.
교집합 (Intersection)
교집합은 두 집합에 공통으로 포함된 요소들의 집합입니다. 즉, 두 집합 모두에 속하는 요소들로 구성된 집합입니다.
합집합 (Union)
합집합은 두 집합의 모든 요소를 포함하는 집합입니다. 여기서 중복되는 요소는 하나로 취급됩니다. 즉, 두 집합 중 어느 한쪽이라도 포함하는 모든 요소들로 구성된 집합입니다.
차집합(Difference)
차집합은 집합 이론에서 두 집합 간의 관계를 나타내는 연산 중 하나입니다. 집합 A와 집합 B가 있을 때, A의 차집합 B(A - B)는 A에는 속하지만 B에는 속하지 않는 모든 요소들의 집합입니다. 즉, A에서 B에 속하는 요소들을 제외한 나머지 요소들로 구성된 집합을 의미합니다.
s1 = set([1, 2, 3, 4, 5, 6]) s2 = set([4, 5, 6, 7, 8, 9]) # &은 교집합, 집합의 교집합은 집합을 출력하기에, 원하면 리스트나 튜플로 형변환하자. print('s1 & s2', s1 & s2) >>> s1 & s2 {4, 5, 6} # 위와 같은결과 print('s1 & s2', s1.intersection(s2)) >>> s1 & s2 {4, 5, 6} # | 은 합집합 print('s1 | s2', s1 | s2) >>> s1 | s2 {1, 2, 3, 4, 5, 6, 7, 8, 9} print('s1 | s2', s1.union(s2)) >>> s1 | s2 {1, 2, 3, 4, 5, 6, 7, 8, 9} # 차집합 print('s1 - s2', s1 - s2) >>> s1 - s2 {1, 2, 3} print('s1 - s2', s1.difference(s2)) >>> s1 - s2 {1, 2, 3}
isdisjoint() : 두 집합이 교집합이 없는지, 즉 공통된 요소가 전혀 없는지 확인합니다. 공통 요소가 없으면 True를, 있으면 False를 반환합니다.
issubset() : 한 집합이 다른 집합의 부분집합인지 확인합니다. s1이 s2의 부분집합이라면 s1의 모든 요소가 s2에 포함되어야 하며, 이 경우 True를 반환합니다.
issuperset() : 한 집합이 다른 집합을 포함하는지 확인합니다. s1이 s2의 상위집합이라면 s2의 모든 요소가 s1에 포함되어야 하며, 이 경우 True를 반환합니다.
s1 = set([1, 2, 3, 4, 5, 6]) s2 = set([4, 5, 6, 7, 8, 9]) print('s1 & s2 : ', s1.isdisjoint(s2)) # 교집합이 있으면 False >>> s1 & s2 : False --------------------------------------------------------------------- # 부분 집합 확인 print('subset : ', s1.issubset(s2)) # s1이 s2의 부분집합인가? >>> subset : False print('superset : ', s1.issuperset(s2)) # s1집합이 s2를 포함하는 집합인가? >>> superset : False
s1 = set([1, 2, 3, 4]) s1.add(5) >>> s1 - {1, 2, 3, 4, 5} s1.remove(7) # 없는 원소를 지우려고 하면 에러 >>> KeyError: 7 s1.remove(2) print('s1 - ', s1) >>> s1 - {1, 3, 4, 5} s1.discard(3) print('s1 - ', s1) >>> s1 - {1, 4, 5} # 집합 안의 모든 원소를 제거 s1.clear() print('s1 - ', s1) >>> s1 - set() # 리스트도 가능 a = [1, 2, 3] a.clear() print(a) >>> []
집합을 마지막으로 파이썬의 모든 자료구조형을 살펴보았다. 다음에는 파이썬의 흐름을 제어하는 if구문을 알아보자. 😊