웹사이트 검색

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") 

출력은 다음과 같습니다.

Output
The lists l1 and l3 are the same The lists l1 and l2 are not the same

앞의 예제 코드는 각 목록을 정렬하고 l1l3과 비교하여 결과를 인쇄한 다음 l1l2 와 비교합니다. 결과를 출력합니다.

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")

출력은 다음과 같습니다.

Output
The lists l1 and l3 are the same The lists l1 and l2 are not the same

앞의 예제 코드는 각 목록의 정렬된 버전을 반환하고 l1l3과 비교하여 결과를 인쇄한 다음 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")

출력은 다음과 같습니다.

Output
The lists l1 and l2 are not the same The lists l1 and l3 are the same

앞의 예제 코드는 l1l2와 비교한 다음 l1l3과 비교합니다.

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")

출력은 다음과 같습니다.

Output
Lists l1 and l2 are equal

앞의 예제 코드는 목록 l1l2에서 집합 ab를 만든 다음 집합을 비교하고 다음을 인쇄합니다. 결과.

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")

출력은 다음과 같습니다.

Output
The lists l1 and l2 are not the same The lists l1 and l3 are the same

앞의 예제 코드는 l1l2 목록에 대한 카운터 개체를 만들고 비교한 다음 결과를 인쇄합니다. 코드는 목록 l1l3에 대해 반복됩니다.

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를 목록 l1l2로 설정한 다음 포인터 요소가 가리키는 항목이 목록. 결과 res가 빈 목록이면 목록 중 하나만 나타나는 항목이 없으므로 목록이 같다고 추론할 수 있습니다.

출력은 다음과 같습니다.

Output
[10, 75] Lists l1 and l2 are not equal

결론

이 기사에서는 Python에서 목록이 같은지 비교하는 몇 가지 다른 방법을 설명했습니다. 더 많은 Python 자습서로 학습을 계속하십시오.