python
python - Set(집합)의 생성에서 응용 예제까지
해보쟈
2025. 1. 24. 12:26
파이썬의 Set(집합)
set은 집합 자료형으로, 중복을 허용하지 않고, 순서가 없는 데이터 구조이다.
수학의 집합 개념을 프로그래밍에서도 활용할 수 있도록 제공되며, 교집합, 합집합, 차집합 같은 집합 연산도 지원한다.
1. Set 생성 방법
중괄호 { } 또는 set() 함수를 사용하여 생성한다.
빈 Set은 set()로만 생성 가능({ }는 빈 딕셔너리로 인식됨)
# Set 생성
s1 = {1, 2, 3}
s2 = set([1, 2, 3]) # 리스트를 집합으로 변환
s3 = set() # 빈 Set 생성
print(s1, s2, s3) # {1, 2, 3} {1, 2, 3} set()
2. Set의 특징
* 중복된 값이 허용되지 않음
s = {1, 2, 2, 3}
s #출력 : {1, 2, 3}
* 동일한 값을 여러 번 저장하려 해도 한 번만 저장된다.
* 순서가 없음 -> 순서가 없으므로 인덱스로 접근 불가
s = {1, 2, 3}
# print(s[0]) # 오류 발생 'set' object is not subscriptable
* 변경 가능
s = {1, "apple", (2, 3)}
* Set 자체는 변경 가능하지만, 내부에 저장된 요소는 변경 불가능한 값이어야 한다.
ex) 숫자, 문자열, 튜플 등은 가능하지만, 리스트, 딕셔너리는 불가능하다.
3. 자주 사용되는 Set 메소드
메소드 | 설명 | 예제 |
add(x) | 요소 추가 | s.add(4) |
update(iterable) | 여러 요소 추가(반복 가능한 객체에서) | s.update([5,6]) |
remove(x) | 특정 요소 삭제(없으면 오류 발생) | s.remove(2) |
discard(x) | 특정 요소 삭제(없어도 오류 없음) | s.discard(2) |
pop() | 임의의 요소 제거 후 반환 | removed=s.pop() |
clear() | 모든 요소 제거 | s.clear() |
union(other) | 두 집합의 합집합 반환 | s1.union(s2) |
intersection(other) | 두 집한의 교집합 반환 | s1.intersection(s2) |
difference(other) | 두 집합의 차집합 반환 | s1.difference(s2) |
symmetric_difference(other) | 두 집합의 대칭차집합 반환 | s1.symmetric_difference(s2) |
issubset(other) | 부분집합인지 확인 | s1.issubset(s2) |
issuperset(other) | 상위집합인지 확인 | s1.issuperset(s2) |
isdisjoint(other) | 공통 요소가 없는지 확인 | s1.isdisjoint(s2) |
4. Set 활용 예제
(1) 요소 추가와 삭제
s = {1, 2, 3}
s.add(4) # 요소 추가
print(s) # {1, 2, 3, 4}
s.update([5, 6]) # 여러 요소 추가
print(s) # {1, 2, 3, 4, 5, 6}
s.remove(3) # 요소 삭제 (없으면 오류)
print(s) # {1, 2, 4, 5, 6}
s.discard(10) # 요소 삭제 (없어도 오류 없음)
print(s) # {1, 2, 4, 5, 6}
(2) 집합 연산
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# 합집합 (Union)
print("합집합:", a | b) # {1, 2, 3, 4, 5, 6}
print("합집합 (메소드):", a.union(b)) # {1, 2, 3, 4, 5, 6}
# 교집합 (Intersection)
print("교집합:", a & b) # {3, 4}
print("교집합 (메소드):", a.intersection(b)) # {3, 4}
# 차집합 (Difference)
print("차집합:", a - b) # {1, 2}
print("차집합 (메소드):", a.difference(b)) # {1, 2}
# 대칭차집합 (Symmetric Difference)
print("대칭차집합:", a ^ b) # {1, 2, 5, 6}
print("대칭차집합 (메소드):", a.symmetric_difference(b)) # {1, 2, 5, 6}
(3) 부분집합, 상위집합, 공통 요소 확인
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
# 부분집합 확인
print(a.issubset(b)) # True
# 상위집합 확인
print(b.issuperset(a)) # True
# 공통 요소가 없는지 확인
c = {6, 7}
print(a.isdisjoint(c)) # True
5. Set을 활용한 응용
(1) 리스트에서 중복 제거
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers) # [1, 2, 3, 4, 5]
(2) 두 리스트의 중복 요소 찾기
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
common = set(list1) & set(list2) # 교집합
print("중복 요소:", common) # {3, 4}
(3) 문자열에서 고유한 문자 추출
text = "hello world"
unique_chars = set(text)
print(unique_chars) # {'e', 'd', ' ', 'o', 'h', 'w', 'l', 'r'}