코딩이 즐겁다

[파이썬 기초] 세트 (Set) 타입 사용법 갓벽 가이드 본문

Python

[파이썬 기초] 세트 (Set) 타입 사용법 갓벽 가이드

코즐 2025. 1. 24. 13:28
반응형

 

파이썬 세트 (Set) 타입이란?

파이썬(Python)에서 세트(Set)순서가 없고, 중복을 허용하지 않는 데이터 타입입니다. 세트는 집합 개념을 기반으로 설계되었으며, 중복된 값을 제거하거나, 교집합, 합집합, 차집합 등의 집합 연산을 수행할 때 매우 유용합니다.

 


 

세트 타입 주요 내용

생성 방법 set(), {값1, 값2, ...}
요소 추가 add('값'), update()
요소 삭제 remove('값'), discard('값')
교집합 &, intersection()
합집합 |, union()
차집합 -, difference()
  • 중복 허용 안 함: 동일한 값을 여러 번 저장하려 해도 하나만 저장됩니다.
  • 순서 없음: 세트는 순서가 없기 때문에 인덱싱이나 슬라이싱이 불가능합니다.
  • 가변성: 세트 자체는 변경할 수 있지만, 내부 요소는 해시 가능(hashable) 해야 합니다. 즉, 변경할 수 없는 자료형(문자열, 숫자, 튜플 등)만 세트의 요소로 사용할 수 있습니다.

 


 

세트 생성

세트는 중괄호 {} 또는 set() 함수를 사용하여 생성합니다. 빈 세트를 생성하려면 set()을 사용해야 합니다.

e = set()
print(se, type(se)) # set() <class 'set'>

se = {} 
print(se, type(se)) # {} <class 'dict'>  >>> 중괄호만 사용하면 딕셔너리 타입으로 인식

se = {1}
print(se, type(se)) # {1} <class 'set'>  >>> 중괄호 안에 요소 입력시에만 세트 타입으로 인식

 


 

세트 타입 변환

list() 함수와 tuple() 함수를 사용하여 세트 타입을 다른 타입으로 형변환 할 수 있습니다.

se = {1, 2, 3}

li = list(se)
print(li, type(li)) # [1, 2, 3] <class 'list'>

tu = tuple(se)
print(tu, type(tu)) # (1, 2, 3) <class 'tuple'>

 


 

세트 주요 집합 연산

연산 기호 및 메서드 설명 예제
합집합 | 또는 union() 두 세트의 모든 요소 포함 a | b 또는 a.union(b)
교집합 & 또는 intersection() 두 세트의 공통 요소 a & b 또는 a.intersection(b)
차집합 - 또는 difference() 첫 번째 세트에서 두 번째 세트를 뺀 나머지 a - b 또는 a.difference(b)
대칭 차집합 ^ 또는 symmetric_difference() 두 세트의 공통되지 않은 요소 a ^ b 또는 a.symmetric_difference(b)

 

세트 교집합

'&' 기호와 intersection() 메서드를 통해 두 세트 타입의 교집합 요소들을 구할 수 있습니다.

se1 = {1, 2, 3}
se2 = {3, 4, 5}

se3 = se1 & se2
print(se3) # {3}

se3 = se1.intersection(se2)
print(se3) # {3}

 

세트 합집합

'|' 기호와 union() 메서드를 통해 두 세트 타입의 합집합 요소들을 구할 수 있습니다.

se1 = {1, 2, 3}
se2 = {3, 4, 5}

se3 = se1 | se2
print(se3) # {1, 2, 3, 4, 5}

se3 = se1.union(se2)
print(se3) # {1, 2, 3, 4, 5}

 

세트 차집합

'-' 기호와 difference() 메서드를 통해 두 세트 타입의 차집합 요소들을 구할 수 있습니다.

se1 = {1, 2, 3}
se2 = {3, 4, 5}

se3 = se1 - se2
print(se3) # {1, 2}

se3 = se1.difference(se2)
print(se3) # {1, 2}

 


 

세트 부분 집합과 상위 집합

메서드 설명 예제
issubset() 모든 요소가 다른 세트에 포함되어 있는지 확인 a.issubset(b)
issuperset() 다른 세트의 모든 요소를 포함하는지 확인 a.issuperset(b)
isdisjoint() 두 세트가 공통 요소가 없는지 확인 a.isdisjoint(b)

예제:

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
c = {5, 6}

print(a.issubset(b))     # True (a는 b의 부분 집합)
print(b.issuperset(a))   # True (b는 a의 상위 집합)
print(a.isdisjoint(c))   # True (a와 c는 공통 요소가 없음)

 


 

세트 메서드

메서드 설명 예제
add(x) 요소 x를 추가 s.add(10)
update(iterable) 여러 요소를 추가 s.update([10, 20])
remove(x) 요소 x를 제거 (없으면 오류 발생) s.remove(10)
discard(x) 요소 x를 제거 (없으면 오류 없음) s.discard(10)
pop() 임의의 요소를 제거하고 반환 s.pop()
clear() 모든 요소 제거 s.clear()
copy() 세트를 복사 s2 = s.copy()

예제:

s = {1, 2, 3}

s.add(4)           # {1, 2, 3, 4}
s.update([5, 6])   # {1, 2, 3, 4, 5, 6}
s.remove(3)        # {1, 2, 4, 5, 6}
s.discard(10)      # {1, 2, 4, 5, 6} (오류 발생 안 함)
print(s.pop())     # 임의의 요소 제거 (출력값은 실행마다 다를 수 있음)
s.clear()          # set() (빈 세트)

 

세트 요소 추가

세트 타입은 add() 메서드 update() 메서드를 통해 요소를 추가할 수 있습니다.

se = {1, 2, 3}
se.add(4)
print(se) # {1, 2, 3, 4}

se.update([3, 4, 5])
print(se) # {1, 2, 3, 4, 5}

 

세트 요소 삭제

세트 타입은 discard() 메서드 remove() 메서드를 통해 요소를 제거할 수 있습니다.

se = {'a', 'b', 'c', 'd'}
se.discard('a')
print(se, type(se)) # {'c', 'b', 'd'} <class 'set'>

se.remove('b')
print(se, type(se)) # {'c', 'd'} <class 'set'>

 


 

세트와 반복문

세트는 순서가 없으므로 요소를 반복할 때 출력 순서는 예측할 수 없습니다.

s = {"apple", "banana", "cherry"}
for item in s:
    print(item)

# 예: 실행 결과는 {'apple', 'cherry', 'banana'} 순서대로 출력될 수 있음

 


 

불변 세트 만들기 (Frozen set)

💡 Frozen Set이란?

  • Frozen Set은 일반 세트와 동일한 특성을 가지지만, 불변성(immutable)을 가지는 세트입니다.
  • 요소를 변경하거나 추가/삭제할 수 없습니다.
  • 딕셔너리의 키 또는 다른 세트의 요소로 사용 가능합니다.

 

Frozen Set 생성

fs = frozenset([1, 2, 3, 4])
print(fs)  # frozenset({1, 2, 3, 4})

# 수정 불가
# fs.add(5)  # 오류 발생: 'frozenset' object has no attribute 'add'

 


 

코즐

파이썬을 배우고 싶은 사람은 누구나 파이썬 학원(국비 지원 파이썬 학원)에 가지 않고도 파이썬 공부를 하면서 실력을 쌓아나갈 수 있다고 생각합니다. 

파이썬 온라인 강의 자료를 올리면서 누구나 쉽게 파이썬을 공부하실 수 있도록 최선을 다해서 설명하도록 하겠습니다.

 


 

 

반응형