Post

파이썬 데이터 구조: 세트(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.