Python - 두 리스트 비교, 4가지 방법

파이썬에서 두개의 리스트가 같은지, 다른지 비교하는 방법을 소개합니다.

1. '==' 연산자로 리스트 비교

== 연산자로 두개의 리스트가 같은지 비교할 수 있습니다.

하지만 이 방법에는 문제가 있습니다. 두 리스트가 갖고 있는 요소들이 모두 동일하지만 순서만 다를 때 ==는 false를 리턴합니다. 만약 리스트의 순서가 달라도 요소들이 동일한 경우 같다라고 판단하려면 다른 방법으로 비교해야 합니다.

arr1 = [1, 2, 3]
arr2 = [1, 2, 3]
arr3 = [3, 2, 1]

print(f"arr1 == arr2 : {arr1 == arr2}")
print(f"arr1 == arr2 : {arr1 == arr3}")

Output:

arr1 == arr2 : True
arr1 == arr2 : False

2. sort() 후에 == 연산자로 리스트 비교

순서는 다르지만 갖고 있는 요소들이 같다면, 리스트를 sort()로 변경하고 == 연산자로 비교하면 됩니다. 이렇게 하면 요소는 같지만 순서가 달라서 리스트가 다르다고 판단되는 경우는 없습니다.

arr1 = [1, 2, 3]
arr2 = [3, 2, 1]
arr3 = [3, 2, 1, 0]

arr1.sort()
arr2.sort()
arr3.sort()

print(f"arr1 == arr2 : {arr1 == arr2}")
print(f"arr1 == arr3 : {arr1 == arr3}")

if arr1 == arr2:
    print("arr1 is equal to arr2")

if arr1 != arr3:
    print("arr1 is not equal to arr3")

Output:

arr1 == arr2 : True
arr1 == arr3 : False
arr1 is equal to arr2
arr1 is not equal to arr3

3. 리스트를 set로 변경하고 == 연산자로 비교

set는 순서가 없는 자료구조입니다. 따라서 set로 변환하고 == 연산자로 비교하면, 요소는 같지만 순서가 달라서 리스트가 다르다고 판단되는 경우는 없습니다.

arr1 = [1, 2, 3]
arr2 = [3, 2, 1]
arr3 = [3, 2, 1, 0]

set1 = set(arr1)
set2 = set(arr2)
set3 = set(arr3)

if set1 == set2:
    print("arr1 is equal to arr2")

if set1 != set3:
    print("arr1 is not equal to arr3")

Output:

arr1 is equal to arr2
arr1 is not equal to arr3

4. collections.Counter()으로 리스트 비교

collections.Counter()으로 아래와 같이 두개의 리스트를 비교할 수 있습니다. 이 방법은, 요소는 동일하지만 순서만 다른 경우에도 같다고 판단됩니다.

import collections

arr1 = [1, 2, 3]
arr2 = [3, 2, 1]
arr3 = [3, 2, 1, 0]

if collections.Counter(arr1) == collections.Counter(arr2):
    print("arr1 is equal to arr2")

if collections.Counter(arr1) != collections.Counter(arr3):
    print("arr1 is not equal to arr3")

Output:

arr1 is equal to arr2
arr1 is not equal to arr3

참고로, collections.Counter()는 리스트가 갖고 있는 요소들을 카운트해주는 함수인데, 순서는 고려하지 않고 비교를 합니다.

import collections

arr1 = [1, 2, 3]
arr2 = [3, 2, 1, 2, 1]

print(collections.Counter(arr1))
print(collections.Counter(arr2))
Counter({1: 1, 2: 1, 3: 1})
Counter({2: 2, 1: 2, 3: 1})
Loading script...
codechachaCopyright ©2019 codechacha