1. 파이썬 두 리스트 비교하기


파이썬 두 리스트 비교하기

파이썬 리스트와 NumPy 어레이는 가장 흔하게 쓰이는 자료형 중 하나입니다.

두 개의 리스트 또는 어레이를 비교하기 위한 다양한 방법에 대해 소개합니다.





1) 파이썬 비교 연산자 사용하기

두 개의 파이썬 리스트를 비교하는 가장 간단한 방법은 연산자 ‘==’를 사용하는 것입니다.

‘==’는 파이썬의 비교 연산자 중 하나로서 두 피연산자가 같을 경우 True를, 그렇지 않을 경우 False를 반환합니다.

자세한 내용은 Python 연산자 - 비교 연산자 페이지를 참고하세요.


_images/compare_two_lists_01.png

_images/compare_two_lists_02.png

비교 연산자를 이용한 리스트 비교하기


예제

list1 = [[1, 2], [3, 4]]
list2 = [[1, 2], [3, 4]]
print(list1 == list2)

list3 = [[1, 2], [3, 4]]
list4 = [[1, 2], [5, 4]]
print(list3 == list4)
True
False

두 리스트에 대해 비교 연산자 ‘==’를 사용하면,

두 리스트가 동일할 경우 True를, 그렇지 않은 경우 False를 반환합니다.




2) 파이썬 내장함수 sorted() 사용하기

길이가 같은 두 리스트에 대해 성분이 동일한지 확인하고 싶다면 sorted()를 사용해서 정렬한 후 비교할 수 있습니다.

파이썬 내장함수 sorted()는 기본적으로 리스트를 오름차순으로 정렬합니다.

sorted() 함수에 대해서는 Python 내장함수 - sorted() 페이지를 참고하세요.


_images/compare_two_lists_03.png

파이썬 내장함수 sorted()로 리스트 정렬하기


예제

list5 = [1, 2, 3, 4, 5]
list6 = [3, 1, 4, 5, 2]
print(sorted(list5) == sorted(list6))
True

크기순으로 정렬한 리스트의 길이가 같고 요소들이 같을 경우 True를, 그렇지 않은 경우 False를 반환합니다.




3) 파이썬 내장함수 set() 사용하기

요소의 개수와 중복에 관계없이 동일한 요소들로 이루어져 있는지 확인하고 싶다면 파이썬 집합 자료형을 사용할 수 있습니다.

집합은 중복을 허용하지 않는, 순서를 고려하지 않는 자료형입니다.

자세한 내용은 Python 집합 (Sets) 페이지를 참고하세요.


_images/compare_two_lists_04.png

파이썬 내장함수 set() 사용하기


숫자들의 1차원 리스트를 파이썬 내장함수 set()에 입력하면 집합의 형태로 반환합니다.

예를 들어 리스트 [1, 2, 3, 1, 2, 4]을 집합형으로 변환하면 {1, 2, 3, 4}가 됩니다.


예제

list1 = [1, 2, 3, 1, 2, 4]
list2 = [2, 3, 1, 5, 3]
list3 = [1, 3, 2, 4, 1]

print(set(list1))
print(set(list2))
print(set(list3))
print(set(list1) == set(list2))
print(set(list1) == set(list3))
{1, 2, 3, 4}
{1, 2, 3, 5}
{1, 2, 3, 4}
False
True

list1과 list2는 다른 요소들의 집합이고, list1과 list3은 같은 요소들로 이루어진 집합이므로

각각 FalseTrue를 반환합니다.



4) np.array_equal() 사용하기

두 개의 NumPy 어레이를 비교하기 위해서는 np.array_equal()을 사용할 수 있습니다.

np.array_equal()는 두 어레이를 비교하기 위한 함수입니다.

np.array_equal() 함수에 대해서는 NumPy 다양한 함수들 - numpy.array_equal 페이지를 참고하세요.


_images/compare_two_lists_05.png

_images/compare_two_lists_06.png

np.array_equal()을 이용한 두 어레이 비교하기


예제

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[1, 2], [3, 4]])
print(np.array_equal(arr1, arr2))

arr3 = np.array([[1, 2], [3, 4]])
arr4 = np.array([[1, 2], [5, 4]])
print(np.array_equal(arr3, arr4))
True
False

arr1과 arr2는 어레이의 형태와 요소들이 동일하므로 True를 반환합니다.

arr3과 arr4는 어레이의 형태는 같지만, 모든 요소들이 동일하지는 않으므로 False를 반환합니다.




5) np.equal() 사용하기

np.equal() 함수를 사용하면, 각 요소 단위로 값을 비교해서 True 또는 False 값을 반환합니다.

np.equal() 함수에 대해서는 NumPy 다양한 함수들 - numpy.equal 페이지를 참고하세요.


_images/compare_two_lists_07.png

_images/compare_two_lists_08.png

np.equal() 함수를 이용한 두 어레이 비교하기


예제

import numpy as np

a = np.array([0, 1, 3])
b = np.arange(3)

print(np.equal(a, b))
print(a == b)
[ True  True False]
[ True  True False]

Numpy 어레이에 대해 비교 연산자 ‘==’를 사용하면, np.equal() 함수와 같이 동작합니다.




6) np.isclose(), np.allclose() 사용하기

두 NumPy 어레이의 각 요소가 허용 오차 (tolerance) 내에서 차이가 있는지 확인하고 싶다면,

np.isclose() 또는 np.allclose() 함수를 사용할 수 있습니다.

np.isclose(), np.allclose() 함수에 대한 자세한 내용은 numpy.isclose, numpy.allclose 페이지를 참고하세요.


Syntax

numpy.isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)

a, b에는 비교할 어레이를 입력합니다.

rtol은 상대적 허용 오차 (Relative tolerance), atol은 절대적 허용 오차 (Absolute tolerance)를 나타냅니다.


Tolerance

absolute(a - b) <= (atol + rtol * absolute(b))

허용 오차는 위 수식과 같이 rtol, atol 값과 어레이의 값들에 의해 결정됩니다.


예제1

import numpy as np

a = [1.0, 10.0]
b = [0.9, 9.0]

print(np.isclose(a, b))
print(np.allclose(a, b))
[False False]
False

np.isclose(a, b)는 어레이의 각 요소의 차이가 허용 오차 내에 있는지 확인하는데,

rtolatol을 지정해주지 않았기 때문에 허용 오차는 (1e-8 + 1e-5 * 0.9)(1e-8 + 1e-5 * 9.0)이 됩니다.

각 어레이의 첫번째 요소들의 차이인 0.1과 두번째 요소들의 차이인 1.0은 모두 허용 오차보다 크기 때문에

np.isclose(a, b)는 [False False]가 됩니다.

np.allclose(a, b)np.isclose(a, b)의 값이 모두 True인 경우에만 True를 반환합니다.


예제2

import numpy as np

a = [1.0, 10.0]
b = [0.9, 9.0]

print(np.isclose(a, b, atol=0.5))
print(np.allclose(a, b, atol=0.5))
[ True False]
False

atol=0.5로 설정하면 허용 오차는 (0.5 + 1e-5 * 0.9)(0.5 + 1e-5 * 9.0)이 됩니다.

각 어레이의 첫번째 요소들의 차이인 0.1는 허용 오차 내에 있고, 두번째 요소들의 차이인 1.0은 허용 오차보다 크기 때문에

np.isclose(a, b)는 [ True False]가 됩니다.

np.allclose(a, b)는 False가 됩니다.


예제3

import numpy as np

a = [1.0, 10.0]
b = [0.9, 9.0]

print(np.isclose(a, b, rtol=0.5))
print(np.allclose(a, b, rtol=0.5))
[ True  True]
True

rtol=0.5로 설정하면 허용 오차는 (1e-8 + 0.5 * 0.9)(1e-8 + 0.5 * 9.0)이 됩니다.

각 어레이의 첫번째 요소들의 차이인 0.1과 1.0은 모두 허용 오차 내에 있기 때문에

np.isclose(a, b)는 [ True True]가 됩니다.

np.allclose(a, b)는 True가 됩니다.



이전글/다음글

이전글 :