1. 세트(Set)란?
세트는 중복을 허용하지 않고, 순서가 없는 자료 구조다. 중괄호({})를 사용한다.
nums = {1, 2, 3, 4, 5}
fruits = {"apple", "banana", "cherry"}
- 순서 없음 : 인덱스로 접근 불가능
- 중복 불가 : 같은 값이 있으면 하나만 저장됨
- 가변성(Mutable) : 추가/삭제 가능하지만, 원소는 해시 가능한(immutable) 값만 넣을 수 있음
nums = {1, 2, 2, 3, 3}
print(nums) # {1, 2, 3}
2. 세트 생성 방법
# 중괄호 사용
s1 = {1, 2, 3}
# set() 함수 사용
s2 = set([1, 2, 3, 4])
# 빈 세트는 반드시 set() 사용
s3 = set()
print(type(s3)) # <class 'set'>
{}→ 비어 있으면dict로 인식되므로, 빈 세트는set()으로 생성해야 함
3. 원소 추가와 삭제
3.1 원소 추가
s = {1, 2, 3}
s.add(4) # 단일 원소 추가
s.update([5, 6, 7]) # 여러 원소 추가
print(s) # {1, 2, 3, 4, 5, 6, 7}
3.2 원소 삭제
s = {1, 2, 3, 4}
s.remove(3) # 값 3 삭제 (없으면 오류)
s.discard(5) # 값 5 삭제 (없어도 오류 없음)
popped = s.pop() # 임의의 원소 제거 및 반환
print(s, popped)
remove(x): 값이 없으면 오류discard(x): 값이 없어도 안전pop(): 임의의 원소 제거
4. 집합 연산
세트는 수학의 집합 개념과 동일하게 합집합, 교집합, 차집합 등을 제공한다.
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # 합집합 {1, 2, 3, 4, 5, 6}
print(A & B) # 교집합 {3, 4}
print(A - B) # 차집합 {1, 2}
print(A ^ B) # 대칭차집합 {1, 2, 5, 6}
|: 합집합&: 교집합- : 차집합
^: 대칭차집합
5. 기타 메서드
s = {1, 2, 3}
print(len(s)) # 원소 개수
print(2 in s) # 포함 여부 검사
s.clear() # 모든 원소 제거
len(s): 원소 개수in: 포함 여부 확인clear(): 세트 비우기
6. 활용 예시
- 중복 제거 : 리스트에서 중복된 값 제거 후 다시 리스트로 변환
- 교집합 검사 : 공통 원소 빠르게 찾기
- 차집합 활용 : 누락된 값 찾기
nums = [1, 2, 2, 3, 3, 4]
unique = list(set(nums))
print(unique) # [1, 2, 3, 4]