Skip to main content

Command Palette

Search for a command to run...

[Python TIL] SET 자료형 집합 연산

Updated
•4 min read•View as Markdown
K

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).

Python의 set 자료형을 이용해서 쉽게 할 수 있는 집합 연산 (union, intersection, difference, symmetric difference) 을 예제와 함께 정리해보자.

이런 연산은 추천 알고리즘, 공통 관심사 분석, 유사도 측정 같은 곳에서 많이 쓰이기 때문에 꼭 알아두면 좋아!


🧠 Python set을 이용한 집합 연산 총정리

🔹 두 집합 정의부터 시작!

A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

1️⃣ 합집합 (Union)

💡 의미: A 또는 B에 하나라도 포함된 원소들

✅ 방법

A | B           # 연산자
A.union(B)      # 메소드

🧪 예시 & 결과

print(A | B)         # 출력: {1, 2, 3, 4, 5, 6}
print(A.union(B))    # 출력: {1, 2, 3, 4, 5, 6}

2️⃣ 교집합 (Intersection)

💡 의미: A와 B에 모두 포함된 원소들

✅ 방법

A & B
A.intersection(B)

🧪 예시 & 결과

print(A & B)               # 출력: {3, 4}
print(A.intersection(B))   # 출력: {3, 4}

3️⃣ 차집합 (Difference)

💡 의미: A에는 있지만 B에는 없는 원소

✅ 방법

A - B
A.difference(B)

🧪 예시 & 결과

print(A - B)               # 출력: {1, 2}
print(A.difference(B))     # 출력: {1, 2}

4️⃣ 대칭차집합 (Symmetric Difference)

💡 의미: A 또는 B에는 있지만, 둘 다에 속하지 않은 원소

✅ 방법

A ^ B
A.symmetric_difference(B)

🧪 예시 & 결과

print(A ^ B)                       # 출력: {1, 2, 5, 6}
print(A.symmetric_difference(B))   # 출력: {1, 2, 5, 6}

📌 요약표

연산설명연산자메소드예시 결과
합집합A 또는 B``A.union(B)
교집합A와 B 모두&A.intersection(B){3, 4}
차집합A에는 있고 B에는 없음-A.difference(B){1, 2}
대칭차집합A 또는 B에는 있지만 둘 다에는 없음^A.symmetric_difference(B){1, 2, 5, 6}

# 각 영화 별 시청자 리스트를 임포트합니다.
from viewers import dark_knight, iron_man

dark_knight_set = set(dark_knight)
iron_man_set = set(iron_man)

# 두 작품을 모두 시청한 사람의 수
both = len(dark_knight_set & iron_man_set)

# 두 작품 중 최소 하나를 시청한 사람의 수
either = len(dark_knight_set | iron_man_set)

# 다크나이트만 시청한 사람의 수
dark_knight_only = len(dark_knight_set - iron_man_set)

# 아이언맨만 시청한 사람의 수
iron_man_only = len(iron_man_set - dark_knight_set)


# 아래 주석을 해제하고 실행 결과를 확인해보세요.
print("두 작품 모두 시청: {}명".format(both))
print("하나 이상 시청: {}명".format(either))
print("다크나이트만 시청: {}명".format(dark_knight_only))
print("아이언맨만 시청: {}명".format(iron_man_only))
  • 수를 셀 때는 len을 사용

🎯 활용 꿀팁

  • 두 사람이 공통으로 본 영화 리스트 → intersection

  • A가 본 영화 중 B는 안 본 영화 → difference

  • 한 사람만 본 영화 → symmetric_difference


실전 활용

이제 set을 이용한 실전 활용 중 하나인 자카드 유사도 (Jaccard Similarity) 에 대해 예시와 함께 봐보자.
자카드 유사도는 텍스트 분석, 추천 시스템, 클러스터링, 유사 문서 검색 등 다양한 분야에서 널리 쓰이는 기법이다.

📊 Jaccard Similarity란?

두 집합의 공통된 원소 비율을 통해 유사도를 계산하는 방법이다.

공식:

  • A: 첫 번째 집합

  • B: 두 번째 집합

  • ∩: 교집합

  • ∪: 합집합


📌 예시: 두 유저가 본 영화

user_A = {'Avengers', 'Frozen', 'Batman'}
user_B = {'Frozen', 'Avatar', 'Batman', 'Titanic'}

✅ 자카드 유사도 계산:

intersection = user_A & user_B  # {'Frozen', 'Batman'}
union = user_A | user_B         # {'Avengers', 'Frozen', 'Batman', 'Avatar', 'Titanic'}

jaccard_sim = len(intersection) / len(union)
print(f"자카드 유사도: {jaccard_sim:.2f}")

✅ 결과:

자카드 유사도: 0.40
  • 교집합 개수: 2

  • 합집합 개수: 5

  • 유사도: 2 / 5 = 0.4


🧠 활용 아이디어

분야활용 예
검색엔진사용자가 입력한 키워드와 문서 키워드의 유사도 계산
추천 시스템유저가 본 아이템과 다른 유저의 아이템 비교
문서 분류뉴스 기사나 논문 간의 주제 유사도 측정

🎯 한 줄로 구현하기

jaccard_sim = len(user_A & user_B) / len(user_A | user_B)

🔥 실전 꿀팁

  • set 자료형을 사용하면 자카드 유사도 계산이 매우 간단해진다.

  • 문장을 단어 집합으로 바꾸면 텍스트 유사도에도 활용 가능!

s1 = set("I love python".split())
s2 = set("I love AI and python".split())

print(f"자카드 유사도: {len(s1 & s2) / len(s1 | s2):.2f}")
# 출력: 자카드 유사도: 0.60

More from this blog

[Python 자료구조] Binary Tree(이진 트리) 개념과 배열

자료구조 중에서도 가장 자주 등장하고, 가장 중요한 트리 중 하나가 바로 이진트리(Binary Tree)이다.만약 자료구조 공부를 처음 시작했다면, 이진트리는 꼭 제대로 이해하고 넘어가야 할 핵심 개념이다. 그렇다면 이진트리는 도대체 어떤 구조이며, 왜 이렇게 중요할까? 🌳 이진트리란? 이진트리(Binary Tree)는 이름 그대로 자식 노드를 최대 두 개까지만 가질 수 있는 트리를 의미한다.자식 노드가 1개거나 0개일 수도 있지만, 최대...

Apr 8, 20253 min read

[Python 자료구조] Tree(트리) 구조

회사 조직도, 가계도, 또는 어떤 계층적인 구조를 표현할 때 자주 등장하는 그림이 있다. 바로 '트리 구조'이다. 그런데 이 구조를 처음 보면, "도대체 어디가 나무야?" 라고 생각할 수 있다. 하지만 나무를 거꾸로(180도 돌려서) 생각해보면 이해가 쉽다. 위쪽에 커다란 줄기(기둥)가 있고, 아래로 가지가 퍼져 나가는 모습과 아주 흡사하기 때문이다. 그래서 우리는 이런 구조를 트리(Tree) 구조라고 부른다. 🧩 트리(Tree)란 무엇인가...

Apr 8, 20253 min read

[Python 자료구조] Stack(스택)

스택 정의, 값 넣기/빼기 프로그래밍을 처음 접할 때 나오는 대표적인 자료구조 중 하나가 바로 스택(Stack) 이다. 이름만 들으면 어렵게 느껴질 수 있지만, 실제로는 우리 일상에서도 쉽게 찾아볼 수 있는 개념이다. 예를 들어 젠가(Jenga) 게임을 떠올려보자. 스택이란? 젠가로 이해하는 Stack의 원리 젠가 블럭을 하나씩 통에 넣고 꺼내는 상황을 상상해보자. 가장 최근에 넣은 블럭은 통의 가장 위에 쌓이게 된다. 그리고 꺼내고자 할 때...

Apr 7, 20253 min read

[Sql] 제약 조건과 무결성

SQL을 공부하다 보면 반드시 만나게 되는 용어들이 있다. 바로 기본키, 외래키, 무결성 제약 조건 같은 개념이다. 이 글에서는 이 용어들을 단순히 암기하는 게 아니라, 예시를 통해 자연스럽게 이해할 수 있도록 정리해보았다. 🎯 제약 조건이란? 제약 조건(Constraint)은 데이터베이스에 저장되는 데이터의 정확성과 신뢰성을 보장하기 위해 설정하는 규칙이다. ✅ 한 줄에 하나씩만 작성해야 하며, 테이블 생성 시 컬럼 옆에 정의하거나 AL...

Apr 7, 20253 min read

[Python TIL] Python에서 False와 True로 평가되는 값들

파이썬에서는 if 조건문이나 while 같은 컨트롤 흐름에서 자동으로 False로 간주되는 값들이 있다. 이걸 "Falsy 값" 또는 "Falsy Object" 라고 부른다. 이걸 알아두면 코드를 훨씬 깔끔하게 쓸 수 있다. 예를 들어, if not my_list: 같은 표현이 빈 리스트를 체크하는 데 쓰이기도 하기 때문이다. ⚠️ 파이썬에서 False로 평가되는 값들 (Falsy 값) 유형예시설명 숫자형0, 0.0, 0j정수, ...

Apr 6, 20252 min read

Code Compass

75 posts