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'}