어제 오늘 내일

[Python 기초] "누가 빠졌지?" 리스트 차집합 찾기 및 데이터 대조 본문

IT/Python

[Python 기초] "누가 빠졌지?" 리스트 차집합 찾기 및 데이터 대조

hi.anna 2026. 5. 22. 19:16

 
두 명단을 비교해서 "한쪽에는 있지만 다른 쪽에는 없는" 데이터를 찾아내는 방법들을 정리해 드릴게요.


1. 가장 쉽고 빠른 방법: 빼기() 연산자

집합(set) 자료형은 우리가 숫자를 빼는 것과 똑같은 - 기호를 지원합니다. 앞의 집합에서 뒤의 집합과 겹치는 부분(교집합)을 덜어내고 남은 것만 보여줍니다.

📌 예제 코드: '-' 기호로 누락 데이터 찾기

all_students = ["철수", "영희", "민수", "지훈", "수진"]
submitted = ["영희", "수진"]

# 1. 집합으로 변환
set_all = set(all_students)
set_sub = set(submitted)

# 2. 전체 명단에서 제출자 명단을 뺍니다.
not_submitted = set_all - set_sub

print("미제출자:", list(not_submitted))
# 출력: ['철수', '민수', '지훈'] (순서는 바뀔 수 있음)

2. 가독성을 높이는 방법:  함수

기호 대신 이름을 사용하는 방식입니다. 역시나 협업 환경에서 "차집합을 구한다"는 의도를 명확히 전달할 때 좋습니다.

📌 예제 코드: difference 함수 활용

list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]

# list1에는 있지만 list2에는 없는 요소들
diff = list(set(list1).difference(list2))

print("차집합 결과:", diff)
# 출력: [1, 2, 3]

3. 순서를 유지해야 할 때: 리스트 컴프리헨션

차집합 역시 set을 쓰면 순서가 뒤섞입니다. 만약 "전체 명단에 적힌 순서 그대로" 빠진 사람을 보고 싶다면 리스트 컴프리헨션을 사용하세요.

📌 예제 코드: 순서 유지 차집합

total_list = ["A", "B", "C", "D", "E"]
remove_list = ["B", "D"]

# remove_list를 set으로 미리 바꿔두면 검색 속도가 훨씬 빨라집니다 (필수 꿀팁!)
set_remove = set(remove_list)

# total_list에서 하나씩 꺼내는데, 그게 remove_list에 '없는(not in)' 경우만 모으기
result = [item for item in total_list if item not in set_remove]

print("순서 유지 결과:", result)
# 출력: ['A', 'C', 'E']

📝 요약 및 실무 팁

  • 빠른 비교가 필요할 때: set_a - set_b
  • 원본 순서가 중요할 때: [x for x in list_a if x not in set_b]

🔥 실무 꿀팁:
데이터 대조를 할 때 대소문자가 섞여 있으면 파이썬은 서로 다른 데이터로 인식합니다 ("Apple""apple"은 다름). 이럴 땐 리스트를 집합으로 만들기 전에 모든 요소를 소문자로 바꾸는 과정이 필요합니다.

# 모든 요소를 소문자로 통일한 뒤 차집합 구하기
list_a = [x.lower() for x in list_a]
list_b = [x.lower() for x in list_b]
diff = set(list_a) - set(list_b)

 

반응형
Comments