튜토리얼
Python에서 두 리스트 비교하기
작성자 songshiqiang7분 소요
Python에서 두 리스트를 비교해 차이·공통·고유 요소를 찾는 일은 매우 흔합니다. 목적에 맞춰 다음 방법들을 선택하세요.
1. set (가장 빠르고 간결)
순서/중복이 중요하지 않을 때 적합합니다.
list_a = [1, 2, 3, 4, 5]
list_b = [4, 5, 6, 7, 8]
set_a = set(list_a)
set_b = set(list_b)
common = set_a & set_b # 교집합
only_a = set_a - set_b # A에만
only_b = set_b - set_a # B에만
symm = set_a ^ set_b # 대칭차
장점: 대용량에서도 매우 빠르고 간결. 단점: 순서/중복이 사라짐.
2. 리스트 컴프리헨션(순서/중복 유지)
list_a = [1, 2, 3, 4, 5, 5]
list_b = [4, 5, 6, 7, 8]
only_a = [x for x in list_a if x not in list_b] # [1, 2, 3]
common = [x for x in list_a if x in list_b] # [4, 5, 5]
성능 팁: list_b를 set으로 변환 후 사용하면 in 조회가 빨라집니다.
set_b = set(list_b)
common = [x for x in list_a if x in set_b]
3. for 반복문(초보자 친화적)
only_a = []
for x in list_a:
if x not in list_b:
only_a.append(x)
4. collections.Counter(빈도 비교)
from collections import Counter
ca = Counter(['a', 'b', 'b', 'c'])
cb = Counter(['b', 'c', 'd', 'e'])
common = list((ca & cb).elements()) # ['b', 'c']
only_a = list((ca - cb).elements()) # ['a', 'b']
장점: 빈도 기준 비교에 적합. 단점: 원래 순서를 유지하지 않음.
요약
| 방법 | 장점 | 단점 | 권장 용도 |
|---|---|---|---|
| set | 빠르고 간결 | 순서/중복 없음 | 교집합·(대칭)차집합 |
| 리스트 컴프리헨션 | 순서/중복 유지 | 대용량에서 느릴 수 있음(셋 권장) | 조건 필터/순서 유지 |
| for 반복문 | 확장 쉬움 | 다소 장황 | 초보자/복잡 조건 |
| Counter | 빈도 비교 용이 | 순서 없음 | 개수 차이 비교 |
팁: 멤버십 체크만 필요하면 대상 리스트를 set으로 변환해 성능을 높이세요.
태그
#Python#리스트 비교#튜토리얼