Python에서 두 목록을 비교하는 방법
소개
Python을 프로그래밍하거나 학습할 때 두 개 이상의 목록이 동일한지 여부를 확인해야 할 수 있습니다. 목록이 같은지 비교하면 목록의 길이가 같은지, 목록의 각 항목이 같은지 확인하는 것입니다. 길이가 다른 목록은 결코 같지 않습니다.
이 문서에서는 다음 Python 기능을 사용하여 목록을 비교하는 방법을 설명합니다.
sort()
메서드 또는==
연산자가 있는sorted()
함수==
연산자가 있는set()
함수==
연산자가 있는reduce()
및map()
함수collection.Counter()
클래스와==
연산자- 목록 이해력
sort() 메서드 또는 sorted() 함수를 사용하여 목록 비교
sort()
메서드 또는 sorted()
함수를 사용하여 목록이 같은지 비교할 목적으로 목록을 정렬할 수 있습니다. sort()
메서드는 목록을 제자리에서 정렬하는 반면 sorted()
함수는 새 목록을 반환합니다. 정렬 후 동일한 목록은 동일한 인덱스 위치에 동일한 항목을 갖게 됩니다. ==
연산자는 목록을 항목별로 비교합니다(요소별 비교).
목록은 비교 전에 정렬되기 때문에 원래 목록 항목의 순서는 중요하지 않습니다.
참고: 동일한 데이터 유형의 항목이 있는 목록만 정렬할 수 있습니다.
sort() 메서드 예제
다음 예제에서는 sort()
메서드를 사용하여 목록이 같은지 정렬하고 비교하는 방법을 보여줍니다.
l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 10, 30, 20, 40]
l1.sort()
l2.sort()
l3.sort()
if l1 == l2:
print ("The lists l1 and l2 are the same")
else:
print ("The lists l1 and l2 are not the same")
if l1 == l3:
print ("The lists l1 and l3 are the same")
else:
print ("The lists l1 and l3 are not the same")
출력은 다음과 같습니다.
OutputThe lists l1 and l3 are the same
The lists l1 and l2 are not the same
앞의 예제 코드는 각 목록을 정렬하고 l1
을 l3
과 비교하여 결과를 인쇄한 다음 l1
을 l2
와 비교합니다. 결과를 출력합니다.
sorted() 함수 예제
다음 예제는 sorted()
함수를 사용하여 목록이 같은지 정렬하고 비교하는 방법을 보여줍니다.
l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 10, 30, 20, 40]
l1_sorted = sorted(l1)
l2_sorted = sorted(l2)
l3_sorted = sorted(l3)
if l1_sorted == l2_sorted:
print ("The lists l1 and l2 are the same")
else:
print ("The lists l1 and l2 are not the same")
if l1_sorted == l3_sorted:
print ("The lists l1 and l3 are the same")
else:
print ("The lists l1 and l3 are not the same")
출력은 다음과 같습니다.
OutputThe lists l1 and l3 are the same
The lists l1 and l2 are not the same
앞의 예제 코드는 각 목록의 정렬된 버전을 반환하고 l1
을 l3
과 비교하여 결과를 인쇄한 다음 l1
을 와 비교합니다. l2
결과를 인쇄합니다.
reduce() 및 map() 함수를 사용하여 목록 비교
Python map()
함수를 functools.reduce()
함수와 함께 사용하여 두 목록의 데이터 항목을 비교할 수 있습니다. 조합하여 사용하면 map()
함수는 주어진 함수를 모든 요소에 적용하고 reduce()
함수는 함수를 연속적으로 적용하도록 합니다.
map()
함수는 함수와 이터러블을 인수로 받습니다. map()
함수는 주어진 함수를 iterable의 각 항목에 적용한 후 그 결과로 맵 객체(iterator)를 반환합니다.
functools.reduce()
함수는 또한 함수와 이터러블을 인수로 받습니다. functools.reduce()
함수는 주어진 함수를 iterable의 모든 요소에 재귀적으로 적용합니다. 처음에 functools.reduce()
는 첫 번째와 두 번째 항목에 함수를 적용하고 결과를 반환한 다음 결과와 세 번째 항목에 함수를 적용하고 목록에 항목이 없을 때까지 계속합니다. 왼쪽.
조합하여 사용하면 map()
함수는 주어진 함수를 모든 요소에 적용하고 reduce()
함수는 함수를 연속적으로 적용하도록 합니다.
목록 항목의 순서는 reduce()
및 map()
함수를 사용할 때 중요합니다. 순서가 다른 동일한 항목이 있는 목록은 동일한지 비교할 때 true
를 반환하지 않습니다. 필요한 경우 먼저 목록을 정렬할 수 있습니다.
다음 예제는 reduce()
및 map()
함수를 사용하여 목록이 같은지 비교하는 방법을 보여줍니다.
import functools
l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [10, 20, 30, 40, 50]
if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l2), True):
print ("The lists l1 and l2 are the same")
else:
print ("The lists l1 and l2 are not the same")
if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True):
print ("The lists l1 and l3 are the same")
else:
print ("The lists l1 and l3 are not the same")
출력은 다음과 같습니다.
OutputThe lists l1 and l2 are not the same
The lists l1 and l3 are the same
앞의 예제 코드는 l1
을 l2
와 비교한 다음 l1
을 l3
과 비교합니다.
set() 함수를 사용하여 목록 비교
set()
함수를 사용하여 주어진 목록을 사용하여 set
개체를 만든 다음 ==
연산자를 사용하여 집합이 같은지 비교할 수 있습니다.
원래 목록 항목의 순서는 중요하지 않습니다. 왜냐하면 ==
연산자는 각 집합에 어떤 순서로든 동일한 항목이 포함된 경우 true
를 반환하기 때문입니다.
참고: 중복 목록 항목은 세트에서 한 번만 나타납니다.
다음 예제에서는 목록에서 집합을 만들고 집합이 같은지 비교하는 방법을 보여줍니다.
l1 = [10, 20, 30, 40, 50]
l2 = [50, 10, 30, 20, 40]
a = set(l1)
b = set(l2)
if a == b:
print("Lists l1 and l2 are equal")
else:
print("Lists l1 and l2 are not equal")
출력은 다음과 같습니다.
OutputLists l1 and l2 are equal
앞의 예제 코드는 목록 l1
및 l2
에서 집합 a
및 b
를 만든 다음 집합을 비교하고 다음을 인쇄합니다. 결과.
collections.Counter() 클래스를 사용하여 목록 비교
collections.Counter()
클래스는 목록을 비교하는 데 사용할 수 있습니다. counter()
함수는 목록에 있는 항목의 빈도를 계산하고 데이터를 value:frequency
형식의 사전 개체로 저장합니다. 두 목록의 사전 출력이 동일한 경우 목록이 동일하다고 유추할 수 있습니다.
Counter
클래스를 사용하여 목록을 비교할 때 원래 목록 항목의 순서는 중요하지 않습니다.
다음 예제는 주어진 목록에서 카운터
객체를 생성하고 동일한지 비교하는 방법을 보여줍니다.
import collections
l1 = [10, 20, 30, 40, 50]
l2 = [20, 30, 50, 40, 70]
l3 = [50, 20, 30, 40, 10]
if collections.Counter(l1) == collections.Counter(l2):
print ("The lists l1 and l2 are the same")
else:
print ("The lists l1 and l2 are not the same")
if collections.Counter(l1) == collections.Counter(l3):
print ("The lists l1 and l3 are the same")
else:
print ("The lists l1 and l3 are not the same")
출력은 다음과 같습니다.
OutputThe lists l1 and l2 are not the same
The lists l1 and l3 are the same
앞의 예제 코드는 l1
및 l2
목록에 대한 카운터
개체를 만들고 비교한 다음 결과를 인쇄합니다. 코드는 목록 l1
및 l3
에 대해 반복됩니다.
List Comprehension을 사용하여 List 비교하기
목록 이해를 사용하여 두 목록을 비교할 수 있습니다. 목록 내포에 대한 자세한 내용은 Python 3의 목록 내포 이해를 참조하세요.
목록 이해를 사용하여 목록을 비교할 때 원래 목록 항목의 순서는 중요하지 않습니다.
다음 예제는 목록 내포를 사용하여 목록을 비교하는 방법을 보여줍니다.
l1 = [10, 20, 30, 40, 50]
l2 = [50, 75, 30, 20, 40]
l3 = [50, 20, 30, 40, 10]
res = [x for x in l1 + l2 if x not in l1 or x not in l2]
print(res)
if not res:
print("Lists l1 and l2 are equal")
else:
print("Lists l1 and l2 are not equal")
res2 = [x for x in l1 + l3 if x not in l1 or x not in l3]
print(res2)
if not res2:
print("Lists l1 and l3 are equal")
else:
print("Lists l1 and l3 are not equal")
앞의 예제 코드는 포인터 요소 x
를 목록 l1
및 l2
로 설정한 다음 포인터 요소가 가리키는 항목이 목록. 결과 res
가 빈 목록이면 목록 중 하나만 나타나는 항목이 없으므로 목록이 같다고 추론할 수 있습니다.
출력은 다음과 같습니다.
Output[10, 75]
Lists l1 and l2 are not equal
결론
이 기사에서는 Python에서 목록이 같은지 비교하는 몇 가지 다른 방법을 설명했습니다. 더 많은 Python 자습서로 학습을 계속하십시오.