Set 이란?
집합(Set) 자료구조는 중복을 허용하지 않고, 순서가 없는(unordered)자료형.
수학에서의 집합과 동일한 개념으로서, 고유한 요소들의 모음.
해시 가능한(immutable)데이터 타입의 요소들로 구성되며, 리스트나 딕셔너리와 같은 변경가능한(mutable)객체는 포함 불가.
Set의 특징
1. 중복 없는 요소 저장
- 집합은 중복된 요소를 허용 하지 않는다. 동일한 값을 여러번 추가해도 하나의 요소로 인식.
- 데이터의 고유성 보장 가능
2. 순서가 없음.
- 순서가 없는 자료형이므로, 인덱싱이나 슬라이싱은 사용불가
- 요소의 순서는 예측할 수 없으며, 반복할 때마다 순서가 달라질 수 있음.
3. 변경 가능(Mutable)
- 집합 자체는 변경 가능하므고, 요소의 추가 및 삭제 가능
- But, 집합의 요소들은 변경 불가능한 (immutable)타입이어야함.
세트 정의
{} 또는 set()을 통해 정의
my_set = {1, 2, 2, 3} # {1, 2, 3}
my_set = set([1, 2, 3, 4, 5])
good_set = set("good") # {"g", "o", "d"}
- 빈집합을 생성하려면 set()함수를 사용.
- 빈집합을 생성하기 위해 my_set = {} 를 사용하면 빈 딕셔너리가 되므로 주의
empty_set = set()
Set의 기본 연산
요소 추가
add(element)
my_set = {1, 2, 3}
my_set.add(4) # {1, 2, 3, 4}
update(iterable)
my_set.update([5, 6. 7]) #{ 1, 2, 3, 4, 5, 6, 7 }
요소 제거
remove(element)
- 해당 요소를 제거. 요소가 없으면 KeyError 발생
my_set.remove(3) # {1, 2, 4, 5, 6, 7}
discard(element)
- 해당 요소를 제거. 요소가 없어도 오류 발생 안됨
my_set.discard(10) # 해당 요소가 없으나 오류 없음
pop()
- 집합에서 임의의 요소를 제거하고 반환. 집합이 비어있다면 KeyError 발생
element = my_set.pop() #임의 요소 제거
clear()
- 집합의 모든 요소를 제거하여 빈 집합으로 만듬.
my_set.clear() # set() 빈 집합
집합 연산
합집합(Union)
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1 | set2 # {1, 2, 3, 4, 5}
#또는
union_set = set1.union(set2) # {1, 2, 3, 4, 5}
교집합(Intersecton)
- & 연산자 또는 intersection() 메서드 사용
intersection_set = set1 & set2 # {3}
# 또는
intersection_set = set1.intersection(set2)
차집합(Difference)
- - 연산자 또는 difference()메서드 사용
difference_set = set1 - set2 #{1, 2}
#또는
difference_set = set1.difference(set2) # {1, 2}
대칭 차집합(Symmetric Difference)
- 대칭 차집합은 교집합을뺀 양쪽의 모든 요소.
- ^ 연산자 또는 symmetric_difference() 메서드 사용
symmetric_diff_set = set1 ^ set2 # {1, 2, 4, 5}
부분집합 및 상위집합 검사
- issubset(other_set) : 현재 집합이 other_set의 부분집합인지 검사
set_a = {1, 2}
set_b = {1, 2, 3, 4}
is_subset = set_a.issubset(set_b) # True
- ussuperset(other_set) : 현재 집합이 other_set의 상위집합인지 검사
is_superset = set_b.issubset(set_a) #True
집합의 길이 확인
my_set = {1, 2, 3}
length = len(my_set) # 3
요소 존재 여부 확인
my_set = { 1, 2, 3 }
exists = 2 in my_set # True
집합의 주요 메서드
- add(element): 요소 하나를 집합에 추가.
- update(iterable): 여러 요소를 집합에 추가
- remove(element): 요소를 제거 (존재하지 않으면 오류 발생).
- discard(element): 요소를 제거 (존재하지 않아도 오류 없음).
- pop(): 임의의 요소를 제거하고 반환.
- clear(): 모든 요소 제거.
- union(*others): 여러 집합의 합집합 반환.
- intersection(*others): 여러 집합의 교집합 반환.
- difference(*others): 여러 집합과의 차집합 반환.
- symmetric_difference(other): 두 집합의 대칭 차집합 반환.
- issubset(other): 부분집합 여부 검사.
- issuperset(other): 상위집합 여부 검사.
- copy(): 집합의 얕은 복사본 반환.