| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 문자열
- 파이썬GUI
- 엑셀
- Excel
- Android
- matlab
- Windows10
- win32com
- html
- 윈도우10
- 안드로이드
- 윈도우11
- windows
- Outlook
- python3
- git
- 깃
- 비주얼베이직
- pyqt5
- 아웃룩
- Windows11
- 파이썬
- pandas
- 파워포인트
- 오피스
- office
- 파이썬3
- VBA
- pythongui
- python
Appia의 IT세상
파이썬 리스트 비교 6가지 방법: 순서/중복/교집합/차집합/인덱스 비교 본문
파이썬 리스트 비교 6가지 방법: 순서/중복/교집합/차집합/인덱스 비교

이번 포스팅에서는 파이썬에서 자주 사용하는 리스트를 비교하는 방법을 정리해보겠습니다. 리스트 비교는 단순히 값만 보는 게 아니라 순서와 중복 처리 방식에 따라 결과가 달라질 수 있어, 목적에 맞는 방법을 선택하는 것이 중요합니다. 이 글에서는 실무에서 많이 쓰는 6가지 리스트 비교 방법을 소개합니다.
※ 이 글은 2026년 1월 기준으로 내용이 보완 및 업데이트되었습니다.
먼저 파이썬 리스트 비교 6가지 방법은 다음과 같습니다.
- 완전 동일 비교(값 + 순서까지)
- 인덱스 기준으로 어디가 다른지 찾기(diff)
- 순서 무시 + 중복 포함 비교(정렬 후 비교)
- 순서 무시 + 중복 제거 비교(set 동일성)
- 교집합(공통 원소)
- 차이(어떤 값이 더/덜 있나) 찾기: set 차집합 + Counter(멀티셋)
이 부분에 대해서 각각, 살펴보겠습니다.
완전 동일 비교(값 + 순서까지)
두 리스트의 원소의 값뿐 아니라, 순서까지 완전히 같다면 파이썬에서는 == 연산자로 간단히 비교할 수 있습니다. 그러면 간단한 예시로 한번 살펴보겠습니다.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5]
list3 = [1, 3, 2, 4, 5]
print(list1 == list2)
print(list1 == list3)
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

위에서 결과를 보면, list1과 list2는 리스트의 원소 뿐 아니라, 순서까지 모두 동일합니다. list1과 list2를 == 연산자로 비교했을 때에, 순서까지 동일하기 때문에 True가 나타납니다. 그리고 list1과 list3은 원소는 동일하나, 순서가 다릅니다. 이럴 경우에 list1과 list3을 비교했을 때에, False가 반환됩니다.
인덱스 기준 어디가 다른지 찾기(diff)
리스트가 “다르다”는 것은 알겠는데, 어느 인덱스에서부터 값이 달라지는지 빠르게 확인하고 싶을 때가 있습니다. 이럴 때는 zip_longest()를 사용하면 두 리스트의 길이가 다르더라도 안전하게 비교할 수 있습니다.
from itertools import zip_longest
list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 2, 4]
for idx, (a, b) in enumerate(zip_longest(list1, list2, fillvalue=None)):
if a != b:
print(f"diff index {idx}: list1={a}, list2={b}")
위의 예제를 실행하면 다음과 같은 결과가 나타납니다.

예를 들어 위 코드는 인덱스 1부터 값이 달라짐을 알려주고, 리스트 길이가 다르면 None으로 채워 차이도 함께 확인할 수 있습니다. 참고로 시작은 0부터 합니다.
순서 무시 + 중복 포함 비교(정렬 후 비교)
리스트 비교에서 순서(인덱스)는 중요하지 않지만, 중복 개수는 그대로 유지해서 비교하고 싶다면 sorted()로 정렬한 뒤 비교하는 방법이 가장 직관적입니다. 정렬 후 비교는 리스트의 원소들을 같은 기준으로 나열한 뒤 비교하기 때문에, 중복 개수까지 정확히 반영됩니다. 그러면 다음 예시를 살펴보겠습니다.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 2, 4, 5]
print(sorted(list1) == sorted(list2))
위의 예시의 결과는 True가 됩니다. 각 원소를 정렬 한 후에 비교하면 동일하기 때문입니다. 그러면 추가로 다음 예시를 한번 살펴보겠습니다.
list1 = [1, 2, 2, 3]
list2 = [1, 2, 3, 3]
print(sorted(list1))
print(sorted(list2))
print(sorted(list1) == sorted(list2))
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

list1과 list2는 sorted()로 정렬한 뒤 비교하면 중복 개수까지 반영됩니다. 위 예제에서는 list1에 2가 두 개, list2에 3이 두 개 들어 있어 정렬 결과가 다르므로 False가 반환됩니다.
순서 무시 + 중복 제거 비교(set 동일성)
순서를 무시하고, 중복 없이 원소의 어떤 값이 들어있는지만 비교한다면, set으로 변환하여 비교하는 것이 편리합니다. 다만, set은 중복이 제거되므로, 개수까지 동일할 필요는 없습니다. 그러면 다음 예시를 살펴보겠습니다.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 2, 4]
list3 = [1, 2, 2, 3, 4]
print(set(list1) == set(list2))
print(set(list2) == set(list3))
위의 코드를 수행하면 다음과 같은 결과가 나타납니다.

위의 코드를 수행하면 실제, list2와 list3의 경우 차이가 존재합니다. 실제 구성으로 보면 list2는 원소가 4개이지만, list3은 원소가 5개입니다. 하지만, 중복된 부분과 순서를 제외하면 모두 4개입니다. 따라서 이 부분은 동일하게 인식할 수 있습니다.
교집합(공통 원소)
두 개의 리스트에서 공통으로 존재하는 값만 뽑고 싶다면 set함수와 교집합 연산 함께 사용하면 됩니다. 그러면 다음 예시를 살펴보겠습니다.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 2, 4]
common = set(list1) & set(list2)
print(common)
위의 코드를 수행하면 다음과 같이 형태로 출력이 됩니다.

차이(어떤 값이 더/덜 있나) 찾기: set 차집합 + Counter(멀티셋)
set 차집합
각 리스트에 없는 값이 무엇인지 빠르게 확인할 때는 차집합이 좋습니다.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 2, 4]
only_in_list1 = set(list1) - set(list2)
only_in_list2 = set(list2) - set(list1)
print(only_in_list1)
print(only_in_list2)
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

첫번째의 경우, list1에만 존재하는 항목만, 두번째 결과는 list2에만 존재하는 항목만 출력해줍니다.
Counter 멀티셋(“중복 개수”까지 정확히)
중복 개수까지 포함해 정확히 같은 구성인지 비교하려면 collections.Counter가 가장 명확합니다. 단, 이 경우에 순서의 경우까지는 비교하지 않습니다.
from collections import Counter
list1 = [1, 2, 2, 3]
list2 = [1, 2, 3, 3]
c1 = Counter(list1)
c2 = Counter(list2)
print(c1 == c2)
print(c1 - c2)
print(c2 - c1)
위의 코드를 실행하면 다음과 같이 나타납니다.

각 원의 구성에 따라서 counter를 이용하여 수치 계산하여 비교하는 방식입니다. 따라서 다음과 같이 list1과 list2를 변경해보겠습니다.
list1 = [1, 3, 2, 3]
list2 = [1, 2, 3, 3]
위의 경우다음과 같은 결과가 나오는 것을 알 수 있습니다.

참고(비추천): 원시적인 반복 비교 (for + in)
제가 처음에 코딩을 했을 때 list 비교에 대한 주제를 받았을 때 작성했던 코드입니다. 하기 코드는 list의 크기에 따라서 성능적인 측면에서 손해가 될 수 있습니다. 성능적인 측면을 고려했을 때는 해당 부분에 대해서는 추천하지 않습니다.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 2, 4]
for x in list1:
if x not in list2:
print("only in list1:", x)
for x in list2:
if x not in list1:
print("only in list2:", x)
위의 이야기 한 6가지 방법에 대해서 정리 해보겠습니다.
| 목적(상황) | 추천 방법 | 핵심 포인트 |
| 값 + 순서까지 완전 동일인지 확인 | list1 == list2 | 가장 간단/빠름, 순서 포함 |
| 어디(몇 번째)부터 다른지 찾기 | zip_longest + enumerate | 인덱스 기준 diff, 길이 다름도 처리 |
| 순서 무시 + 중복 포함으로 동일성 비교 | sorted(list1) == sorted(list2) | 중복 개수 유지, 정렬 비용 O(n log n) |
| 순서 무시 + 중복 제거로 동일성 비교 | set(list1) == set(list2) | 중복 사라짐, 값 “종류”만 비교 |
| 공통 원소(교집합) 구하기 | set(list1) & set(list2) | 공통 값만 추출 |
| 서로 다른 원소/개수 차이 찾기 | set 차집합 / Counter | set=종류 차이, Counter=중복 개수까지 비교 |
이번 글에서는 파이썬 리스트 비교를 순서/중복/교집합/차집합/인덱스 diff 관점에서 6가지 방법으로 정리했습니다. 먼저 순서가 중요한지, 중복 개수까지 비교해야 하는지를 정한 뒤, 상황에 맞는 방법을 선택하면 더 빠르게 문제를 해결할 수 있습니다. 혹 작업을 하시다가 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주세요
파이썬[Python] 리스트(List) 역순으로 만들기, 뒤집기 (reversed / reverse / 슬라이싱 비교)
파이썬[Python] 리스트(List) 역순으로 만들기,뒤집기(reversed / reverse / 슬라이싱 비교) 파이썬에서 list를 역순으로 다루는 방법은 생각보다 다양합니다. 경우에 따라서는 단순히 뒤에서부터 값을 읽
appia.tistory.com
파이썬[Python] 중복없이 리스트 합치기, 리스트 반복하기
이번 포스팅은 파이썬[Python] 리스트에 대해서 이야기를 하고자 합니다. 파이썬[Python]에서는 리스트를 가장 많이 사용한다고 생각합니다. 그 파이썬[Python]에서 리스트를 합치거나, 리스트를 반복
appia.tistory.com
'Python > Python 응용' 카테고리의 다른 글
| 파이썬[Python] 032 디렉토리(Directory) 확인 및 변경/절대주소/ 상대 주소 사용법 (0) | 2020.01.06 |
|---|---|
| 파이썬[Python] 031 날짜와 시간 출력하기(time) (0) | 2020.01.05 |
| 파이썬 파일·디렉터리 유무 확인 방법: os.path vs pathlib, 예외 처리까지 (0) | 2019.12.30 |
| 파이썬 [Python] 018 win32com 이용 Excel파일 CSV파일로 저장하기 (0) | 2019.12.29 |
| 파이썬 [Python] 017 win32com 이용하여 Excel 제어하기 (2) | 2019.12.29 |