어제 오늘 내일

[Python 실전 팁] "누가 겹치고 누가 빠졌지?" 파이썬 리스트 교집합, 차집합 비교하기 본문

IT/Python

[Python 실전 팁] "누가 겹치고 누가 빠졌지?" 파이썬 리스트 교집합, 차집합 비교하기

hi.anna 2026. 5. 14. 21:39

두 개의 리스트를 비교할 때, 파이썬 고수들은 리스트를 일단 집합(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초로 단축하실 수 있습니다!
지금까지 리스트와 텍스트 데이터를 자유자재로 해체하고 조립하는 법을 마스터하셨습니다!

반응형
Comments