본문으로 건너뛰기

UZU Dev LogoUZU Dev LogoUZU-DEV

[Python] 자료 구조 : 세트

세트의 특징, 원소 추가 · 삭제, 집합 연산과 중복 제거 활용법을 정리한 글

2025년 9월 10일

[Python] 자료 구조 : 세트 썸네일

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]

[Python] 자료 구조 : 세트