파이썬 데이터 구조: 세트(Set)
세트의 특징과 활용 방법
세트(Set)는 중복을 허용하지 않고, 순서가 없는 데이터 구조입니다. 빠른 데이터 검색과 중복 제거에 유용하며, 집합 연산(합집합, 교집합 등)을 손쉽게 처리할 수 있습니다. 이번 글에서는 세트의 특징과 활용 방법을 살펴보겠습니다.
1. 세트란?
- 중복 불허: 세트는 동일한 값을 여러 번 저장하지 않습니다.
- 순서 없음: 세트의 요소는 순서가 없어 인덱싱이나 슬라이싱이 불가능합니다.
- 중괄호
{}
를 사용하여 정의하며, 빈 세트를 생성할 때는set()
을 사용합니다.
예제
1
2
3
4
5
6
7
8
# 세트 생성
fruits = {"apple", "banana", "cherry", "apple"}
print(fruits)
# 출력: {'apple', 'banana', 'cherry'} # 중복 제거
# 빈 세트 생성
empty_set = set()
print(type(empty_set)) # 출력: <class 'set'>
2. 세트의 주요 특징
1) 중복 제거
- 리스트나 다른 데이터 구조의 중복을 손쉽게 제거할 수 있습니다.
1
2
3
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = set(numbers)
print(unique_numbers) # 출력: {1, 2, 3, 4, 5}
2) 변경 가능(Mutable)
- 세트는 생성 후 요소를 추가하거나 삭제할 수 있습니다.
1
2
3
4
5
6
s = {1, 2, 3}
s.add(4)
print(s) # 출력: {1, 2, 3, 4}
s.remove(2)
print(s) # 출력: {1, 3, 4}
3. 세트의 주요 메서드
메서드 | 설명 | 예제 | 결과 |
---|---|---|---|
add() | 요소 추가 | s.add(5) | {1, 2, 3, 5} |
remove() | 특정 요소 제거 (없는 요소 제거 시 오류) | s.remove(3) | {1, 2, 5} |
discard() | 특정 요소 제거 (없는 요소 제거 시 무시) | s.discard(6) | {1, 2, 5} |
clear() | 모든 요소 제거 | s.clear() | set() |
copy() | 세트 복사 | s.copy() | {1, 2, 5} |
pop() | 임의의 요소 제거 및 반환 | s.pop() | 제거된 요소 |
예제
1
2
3
4
5
s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
s.discard(2) # {1, 3, 4}
print(s)
4. 세트의 집합 연산
세트는 수학의 집합처럼 다양한 연산을 지원합니다.
연산 | 연산자/메서드 | 설명 | 예제 | 결과 |
---|---|---|---|---|
합집합 | | , union() | 두 세트의 모든 요소를 포함 | {1, 2} | {2, 3} | {1, 2, 3} |
교집합 | & , intersection() | 두 세트에 공통으로 포함된 요소 | {1, 2} & {2, 3} | {2} |
차집합 | - , difference() | 한 세트에서 다른 세트를 뺀 요소 | {1, 2} - {2, 3} | {1} |
대칭차집합 | ^ , symmetric_difference() | 두 세트의 공통되지 않은 요소 | {1, 2} ^ {2, 3} | {1, 3} |
예제
1
2
3
4
5
6
7
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # 합집합: {1, 2, 3, 4, 5}
print(a & b) # 교집합: {3}
print(a - b) # 차집합: {1, 2}
print(a ^ b) # 대칭차집합: {1, 2, 4, 5}
5. 세트의 활용
1) 중복 제거
1
2
3
words = ["apple", "banana", "apple", "cherry"]
unique_words = set(words)
print(unique_words) # 출력: {'apple', 'banana', 'cherry'}
2) 리스트 교집합
1
2
3
4
5
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
intersection = set(list1) & set(list2)
print(intersection) # 출력: {3, 4}
3) 데이터 검증
1
2
3
4
5
6
7
8
allowed_users = {"Alice", "Bob", "Charlie"}
current_user = "Alice"
if current_user in allowed_users:
print("Access granted.")
else:
print("Access denied.")
# 출력: Access granted.
6. 세트 vs 리스트 vs 딕셔너리
특징 | 세트(Set) | 리스트(List) | 딕셔너리(Dictionary) |
---|---|---|---|
구조 | 중복 없는 요소 집합 | 순서가 있는 데이터 저장 | 키-값 쌍 저장 |
순서 | 없음 | 있음 | 없음 |
중복 허용 | 불허 | 허용 | 키: 불허, 값: 허용 |
사용 사례 | 중복 제거, 집합 연산 | 순서가 중요한 데이터 | 키를 통해 값 검색 |
정리
- 세트는 중복 없는 데이터를 관리하거나 집합 연산을 수행할 때 유용합니다.
add()
,remove()
등을 사용하여 동적으로 요소를 추가하거나 삭제할 수 있습니다.- 집합 연산을 통해 합집합, 교집합, 차집합 등을 쉽게 계산할 수 있습니다.
다음 글 예고:
이제 파이썬에서 데이터 구조를 모두 학습했으니, 다음 글에서는 “함수와 모듈”을 배우며 코드 재사용성을 높이는 방법을 알아보겠습니다!
This post is licensed under CC BY 4.0 by the author.