파이썬 시퀀스 자료형 - 집합(set) 완벽 가이드
중복 제거? 교집합? 합집합? 차집합?
파이썬에서는 이 모든 걸 아주 간단하게 처리할 수 있는 자료형이 있어요!
바로 집합(set)입니다.
안녕하세요, 여러분 😊
이번 시간에는 파이썬의 시퀀스 자료형 중 하나인 집합(set)에 대해 이야기해보려고 해요.
리스트나 튜플처럼 자주 사용하진 않지만, 특정 상황에서는 정말 강력하게 활용할 수 있는 도구랍니다.
특히 중복 데이터를 제거하거나, 데이터 간의 관계를 분석할 때 엄청 유용해요!
그리고 수학에서 배웠던 교집합, 합집합, 차집합 개념을 그대로 쓸 수 있다는 점도 정말 매력적이죠 😎
그럼, 파이썬 집합(set)의 세계로 한 걸음 들어가볼까요?
목차
1. 집합(set)이란 무엇인가요?
집합(set)은 파이썬의 기본 내장 자료형 중 하나로, 중복을 제거하거나 집합 연산을 쉽게 하기 위해 만들어진 자료형입니다.
수학 시간에 배웠던 집합 개념을 그대로 코드로 구현할 수 있는 강력한 도구죠.
💡 집합(set)의 정의
파이썬의 집합은 다음과 같이 정의할 수 있어요:
- 중복되지 않은 요소들로만 구성됩니다.
- 순서가 없습니다 (즉, 인덱스로 접근 불가능).
- 수학의 교집합, 합집합, 차집합 개념을 그대로 사용할 수 있어요.
🧪 기본 사용 예제
다음은 리스트를 set으로 바꾸는 간단한 예제입니다.
중복된 값이 자동으로 제거되는 걸 볼 수 있어요:
# 리스트 -> 집합
my_list = [1, 2, 3, 2, 4, 1, 5]
my_set = set(my_list)
print(my_set) # 출력 결과: {1, 2, 3, 4, 5}
정말 간단하죠?
이처럼 set() 함수를 사용하면 리스트나 문자열 같은 반복 가능한 객체를 집합으로 만들 수 있어요.
📋 집합의 데이터 구조 형태
자료형 | 기호 | 특징 |
---|---|---|
리스트(list) | [] | 순서 있음, 중복 허용 |
튜플(tuple) | () | 순서 있음, 중복 허용, 불변 |
집합(set) | set() | 순서 없음, 중복 불허 |
이처럼 집합은 리스트와 튜플과는 다른 성격을 가지고 있어서 데이터 중복 제거나 두 데이터 간의 연산이 필요할 때 매우 유용하답니다!
2. 집합 자료형의 주요 특징 🧩
파이썬의 set은 단순히 요소들의 묶음이 아니에요.
아주 특별한 성격을 지니고 있어서 다양한 프로그래밍 상황에서 정말 유용하게 쓰인답니다.
그 특징들을 하나씩 살펴보면, 왜 set을 잘 이해해야 하는지 확 와닿을 거예요!
✅ 1. 중복을 자동으로 제거
set의 가장 핵심적인 특징은 바로 중복을 허용하지 않는다는 것이에요.
리스트나 튜플은 동일한 값을 여러 개 가질 수 있지만, set은 같은 값을 두 번 저장하지 않아요.
my_set = set([1, 2, 2, 3, 4, 4, 5])
print(my_set) # 출력 결과: {1, 2, 3, 4, 5}
🔄 2. 순서가 없다
set은 순서가 없는 데이터 구조입니다.
따라서 리스트처럼 my_set[0]
이런 식으로 인덱싱을 할 수 없어요.
👉 인덱싱이나 슬라이싱이 필요하다면 list나 tuple로 변환해서 사용해야 합니다.
my_set = set(['apple', 'banana', 'cherry'])
print(list(my_set)[0]) # set을 리스트로 변환 후 인덱싱
🚫 3. 변경 가능한 객체는 포함할 수 없음
set에는 변경 가능한(mutable) 객체를 요소로 넣을 수 없어요.
예를 들어
리스트는 mutable하기 때문에 set의 요소로 넣으면 오류가 발생합니다.
my_set = set()
my_set.add([1, 2, 3]) # TypeError 발생!
✔️ 반면 숫자, 문자열, 튜플처럼 변경 불가능한(immutable) 객체는 OK!
🎯 특징 요약
특징 | 설명 |
---|---|
중복 불가 | 동일한 값이 여러 개 들어가도 하나만 저장됨 |
순서 없음 | 인덱싱, 슬라이싱 사용 불가 |
유일한 값 저장 | 데이터 클렌징에 유용 |
mutable 객체 사용 불가 | 리스트 같은 변경 가능한 값은 set 안에 못 들어감 |
이런 특징들 덕분에 set은 데이터 정제나 비교 연산을 빠르게 처리할 수 있어요.
다음 섹션에서는 직접 set을 생성하고 변환하는 방법을 실습해볼게요 💡
3. 집합 생성 방법과 자료형 변환
파이썬의 집합은 set() 함수를 통해 아주 간단하게 만들 수 있어요.
기본 자료형인 리스트, 튜플, 문자열을 집합으로 변환하면,
중복 제거 + 집합 연산 가능이라는 두 마리 토끼를 동시에 잡을 수 있죠! 🐇
🛠️ 집합 생성 방법
집합은 두 가지 방법으로 생성할 수 있어요.
- 빈 집합 만들기:
set()
을 사용 - 초기값 포함 집합: 중괄호
{}
또는set([...])
을 이용
# 빈 집합
a = set()
# 리스트 기반 집합
b = set([1, 2, 3, 3, 4])
# 중괄호 사용
c = {4, 5, 6}
print(a) # set()
print(b) # {1, 2, 3, 4}
print(c) # {4, 5, 6}
🔁 다른 자료형을 집합으로 변환
set() 함수는 문자열, 리스트, 튜플을 집합으로 쉽게 바꿔줘요.
변환 과정에서 중복 값은 자동 제거된다는 점이 핵심입니다.
# 문자열 -> 집합
print(set("hello")) # {'o', 'e', 'l', 'h'}
# 리스트 -> 집합
print(set([1, 2, 2, 3])) # {1, 2, 3}
# 튜플 -> 집합
print(set((4, 4, 5, 6))) # {4, 5, 6}
💡 문자열을 집합으로 바꾸면 '글자 단위'로 분해돼요!
순서도 유지되지 않고 무작위로 정렬된다는 점 참고하세요.
🔃 집합 → 리스트/튜플로 변환
집합은 순서가 없기 때문에 인덱스로 다루고 싶다면 리스트나 튜플로 변환해주는 게 좋아요.
my_set = {10, 20, 30}
print(list(my_set)) # [10, 20, 30]
print(tuple(my_set)) # (10, 20, 30)
✅ 실무에서는 데이터 중복 제거 후 리스트로 변환하는 경우가 자주 있어요!
📌 핵심 요약
- set()은 리스트, 튜플, 문자열을 집합으로 바꿔줌
- {}는 값을 직접 넣어서 집합 생성 가능
- 집합은 list(), tuple()로 다시 변환 가능
이제 set을 자유롭게 만들고 바꾸는 방법을 익혔으니,
다음 장에서는 정말 유용한 집합의 연산 (합집합, 교집합, 차집합)을 살펴볼 차례예요!
4. 집합의 핵심 연산: 교집합, 합집합, 차집합
파이썬의 집합(set)은 정말 강력한 연산 기능을 제공합니다.
특히 수학에서 배운 교집합·합집합·차집합 연산을 그대로 코드로 활용할 수 있어요.
이 기능들 덕분에 데이터 비교, 중복 제거, 정렬 작업이 아주 쉬워지죠.
그럼 하나씩 살펴볼게요! 🚀
🤝 교집합 (intersection)
두 집합 간 공통된 요소만 추출할 때 사용해요.
다음 두 가지 방법이 있어요:
-
&
연산자 사용 -
intersection()
메서드 사용
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a & b) # {3, 4}
print(a.intersection(b)) # {3, 4}
➕ 합집합 (union)
두 집합의 모든 요소를 하나로 합친 결과를 반환해요.
중복된 값은 한 번만 나타납니다.
print(a | b) # {1, 2, 3, 4, 5, 6}
print(a.union(b)) # {1, 2, 3, 4, 5, 6}
➖ 차집합 (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}
📌 집합 연산 정리
연산 종류 | 연산자 | 메서드 |
---|---|---|
교집합 | & | intersection() |
합집합 | | | union() |
차집합 | - | difference() |
대칭 차집합 | ^ | symmetric_difference() |
이런 연산들을 통해 set은 단순한 자료 저장소 그 이상이 됩니다.
데이터 정제, 비교, 분석이 필요할 때 set은 진짜 만능 도구예요!
5. 집합 관련 함수와 메서드 활용법
집합(set)은 연산 기능뿐 아니라 다양한 내장 함수와 메서드를 제공합니다.
특히 데이터를 추가하거나 제거하고, 집합 간 관계를 확인하는 기능이 자주 쓰여요.
이번 섹션에서는 꼭 알아둬야 할 함수들을 정리해볼게요! 🛠️
➕ 요소 추가하기: add()
add()
함수는 집합에 요소 하나를 추가할 때 사용해요.
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # {1, 2, 3, 4}
🔁 여러 요소 추가: update()
update()
는 리스트, 튜플, 문자열 등 여러 값을 한 번에 추가할 수 있어요.
my_set.update([5, 6], {7, 8}, "90")
print(my_set) # {1, 2, 3, 4, 5, 6, 7, 8, '9', '0'}
✅ 문자열은 문자 단위로 추가된다는 점 유의하세요!
❌ 요소 삭제: remove() vs discard()
함수 | 설명 | 존재하지 않는 값 제거 시 |
---|---|---|
remove(x) | x가 있으면 삭제 | 오류 발생 |
discard(x) | x가 있으면 삭제 | 오류 없음 |
my_set.remove(4) # 4 삭제
my_set.discard(99) # 99 없지만 오류 없음
🧼 전체 요소 삭제: clear()
my_set.clear()
print(my_set) # set()
📏 요소 개수 확인: len()
print(len({1, 2, 3, 4})) # 4
🔍 포함 여부 확인: in
요소가 집합에 있는지 확인할 때는 in
키워드를 써요.
fruit_set = {'apple', 'banana', 'cherry'}
print('banana' in fruit_set) # True
print('grape' in fruit_set) # False
이제 집합 관련 함수들을 잘 익혔다면,
마지막으로 실생활에서 이들을 어떻게 활용할 수 있는지 실전 예제에서 살펴볼게요! 💼
6. 집합의 실전 예제와 꼭 필요한 활용팁 ✨
이제 이론은 충분히 익혔으니, 실제로 set이 유용하게 쓰이는 순간을 살펴볼 차례예요.
개발자들이 set을 어떻게 활용하는지 알게 되면, 여러분도 실무에서 더 잘 활용할 수 있을 거예요 😉
📌 중복 제거
# 중복된 이메일 주소 목록에서 유일한 사용자만 추출
emails = ["a@example.com", "b@example.com", "a@example.com"]
unique_emails = list(set(emails))
print(unique_emails) # ['a@example.com', 'b@example.com']
🔍 데이터 비교 및 필터링
# 기존 사용자와 새 가입자 비교
old_users = {"alice", "bob", "carol"}
new_users = {"dave", "bob", "ellen"}
# 신규 가입자만 확인
new_only = new_users - old_users
print(new_only) # {'ellen', 'dave'}
🧠 활용 꿀팁 모음
- 리스트 → set → 리스트로 중복 제거 + 정리 가능
- 데이터 간 차이를 비교할 때
difference()
또는^
적극 활용 - dict의 key 중복 방지 검사도 set 활용 가능
✅ 마무리하며
여러분, set이라는 자료형이 처음엔 살짝 생소할 수 있지만,
실제로 쓰다 보면 중복 제거, 집합 연산, 데이터 정제에 진짜 최고라는 걸 알게 될 거예요.
리스트나 딕셔너리만 사용하던 분들이라면, 이번 기회에 set도 꼭! 도구 상자에 넣어두세요 😄
그럼 다음 시간에는 더 재밌고 실용적인 파이썬 주제로 다시 만나요! 감사합니다 🐍💙
'Python' 카테고리의 다른 글
파이썬 pip와 외부 모듈 활용 완벽 가이드 (1) | 2025.04.10 |
---|---|
파이썬 프로그램의 흐름제어 - if 문 완벽 이해하기 (0) | 2025.04.10 |
파이썬 시퀀스 자료형 딕셔너리(dict) 완전 정복! (5) | 2025.04.10 |
파이썬 튜플(tuple) 완전 정복: 리스트와의 차이점부터 활용법까지 (1) | 2025.04.10 |
시퀀스 자료형 완전 정복: 리스트(list)의 모든 것 (1) | 2025.04.10 |