| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 테스트자동화
- ArrayList
- CSS
- 문자열
- HashMap
- IntelliJ
- Visual Studio Code
- SpringBoot
- 인텔리제이
- 배열
- Eclipse
- java테스트
- 자바스크립트
- math
- javascript
- html
- input
- string
- junit
- js
- 자바문법
- Java
- 스프링부트
- Array
- list
- 자바
- 정규식
- junit5
- 단위테스트
- vscode
- Today
- Total
어제 오늘 내일
[Python 실전 팁] "누가 겹치고 누가 빠졌지?" 파이썬 리스트 교집합, 차집합 비교하기 본문
두 개의 리스트를 비교할 때, 파이썬 고수들은 리스트를 일단 집합(set)으로 변환하고 시작합니다. 집합 자료형은 더하기, 빼기 같은 기호를 써서 데이터를 직관적으로 비교하는 엄청난 능력을 갖추고 있기 때문입니다.
비교할 두 개의 리스트를 먼저 준비해 보겠습니다.
# A팀 명단과 B팀 명단
team_a = ["철수", "영희", "민수", "지훈"]
team_b = ["영희", "지훈", "수진", "동석"]
# 1. 비교를 위해 리스트를 집합(Set)으로 변환합니다.
set_a = set(team_a)
set_b = set(team_b)
1. 교집합 (Intersection): 양쪽 리스트에 모두 있는 데이터 찾기
"A팀과 B팀에 공통으로 속해 있는 사람은 누구일까?"
키보드의 앰퍼샌드(&) 기호를 사용하면 두 집합이 겹치는 부분만 쏙 뽑아냅니다.
📌 예제 코드: 공통 데이터 찾기
# '&' 기호를 사용해 교집합을 구합니다.
common_members = set_a & set_b
# 다루기 편하게 다시 리스트로 묶어주고 정렬까지 해볼까요?
result_list = sorted(list(common_members))
print("양쪽에 다 있는 사람 (교집합):", result_list)
# 출력: ['영희', '지훈']
(💡 참고: 기호 대신 set_a.intersection(set_b) 라는 함수를 써도 결과는 완전히 똑같습니다!)
2. 차집합 (Difference): 한쪽 리스트에만 있는 데이터 찾기
"A팀에는 있는데, B팀에는 없는 사람은 누구일까?"
우리가 흔히 아는 빼기(-) 기호를 사용하면 됩니다. 앞의 집합에서 뒤의 집합과 겹치는 부분을 쿨하게 빼버립니다.
📌 예제 코드: 누락된 데이터 찾기
# A팀에는 있지만 B팀에는 없는 사람 (A - B)
only_in_a = set_a - set_b
print("A팀에만 있는 사람:", list(only_in_a))
# 출력: ['민수', '철수']
# B팀에는 있지만 A팀에는 없는 사람 (B - A)
only_in_b = set_b - set_a
print("B팀에만 있는 사람:", list(only_in_b))
# 출력: ['동석', '수진']
이 차집합 기술은 실무에서 "전체 회원 명단(set_a)" - "이메일 수신 거부자 명단(set_b)" = "이메일 발송 가능 명단"을 뽑아낼 때 아주 기가 막히게 쓰입니다.
3. 합집합 (Union)과 대칭차집합 (Symmetric Difference)
자주 쓰이진 않지만, 알아두면 요긴한 나머지 두 가지 벤 다이어그램입니다.
① 합집합 ( 기호)
두 리스트의 데이터를 하나로 합치되, 중복은 알아서 하나로 처리해 줍니다. 키보드 엔터(Enter) 키 위에 있는 파이프(|) 기호를 씁니다.
# A팀과 B팀의 모든 사람을 중복 없이 모아보기
all_members = set_a | set_b
print("전체 명단 (합집합):", list(all_members))
# 출력: ['지훈', '민수', '수진', '철수', '동석', '영희']
② 대칭차집합 ( 기호)
"양쪽에 다 속한 박쥐(공통 데이터)는 빼고, 오직 한 팀에만 순수하게 속한 사람들만 모아줘!"
교집합의 정확히 반대되는 개념입니다.
# 겹치는 '영희', '지훈'을 제외한 나머지 사람들만 모입니다.
pure_members = set_a ^ set_b
print("한 팀에만 속한 사람 (대칭차집합):", list(pure_members))
# 출력: ['민수', '수진', '철수', '동석']
📝 마치며
비교할 데이터가 10만 개든 100만 개든, 집합(Set) 연산을 사용하면 파이썬이 내부적으로 엄청나게 빠른 속도로 데이터를 대조해 냅니다.
- 공통점 찾기 (교집합):
set_a & set_b - 차이점 찾기 (차집합):
set_a - set_b - 중복 없이 합치기 (합집합):
set_a | set_b
이 기호들만 기억해 두시면 엑셀 VLOOKUP으로 끙끙대며 데이터를 대조하던 시간을 1초로 단축하실 수 있습니다!
지금까지 리스트와 텍스트 데이터를 자유자재로 해체하고 조립하는 법을 마스터하셨습니다!
'IT > Python' 카테고리의 다른 글
| [Python 기초] "미리 빈 칸을 만들어두자!" 파이썬 리스트 크기 지정과 초기화 (0) | 2026.05.18 |
|---|---|
| [Python 기초] "이 바구니에 데이터가 몇 개 들어있지?" 파이썬 리스트 길이 구하기 (len) (1) | 2026.05.17 |
| [Python] "중복 데이터, 대체 어디 숨어있어?" 파이썬 리스트 중복 인덱스(위치) 찾기 완벽 가이드 (0) | 2026.05.12 |
| [Python] "리스트 안의 리스트?" 2차원 리스트 중복 제거 (1) | 2026.04.17 |
| [Python] "원하는 데이터만 쏙쏙!" 파이썬 정규표현식(Regex) 기초 완벽 가이드 (0) | 2026.04.17 |
