Поиск по сайту:

Как сравнить два списка в 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

Код в предыдущем примере сортирует каждый список, сравнивает 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")

Результат:

Output
The 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() применяет заданную функцию к каждому элементу итерируемого объекта, а затем возвращает в качестве результата объект карты (итератор).

Функция functools.reduce() также принимает функцию и итерируемый объект в качестве аргументов. Функция functools.reduce() рекурсивно применяет данную функцию к каждому элементу итерируемого объекта. Первоначально 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

Код в предыдущем примере сравнивает 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")

Результат:

Output
Lists l1 and l2 are equal

Код в предыдущем примере создает наборы a и b из списков l1 и l2, а затем сравнивает наборы и печатает результат.

Использование класса collections.Counter() для сравнения списков

Класс collections.Counter() можно использовать для сравнения списков. Функция counter() подсчитывает частоту элементов в списке и сохраняет данные в виде объекта словаря в формате value:frequency. Если два списка имеют одинаковый вывод словаря, вы можете сделать вывод, что списки одинаковы.

Порядок элементов исходного списка не важен, когда вы используете класс Counter для сравнения списков.

В следующем примере показано, как создавать объекты 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

Код в предыдущем примере создает объекты Counter для списков l1 и l2, сравнивает их и печатает результат. Код повторяется для списков l1 и l3.

Использование понимания списков для сравнения списков

Вы можете использовать понимание списка для сравнения двух списков. Дополнительные сведения о генераторах списков см. в статье Общие сведения о генераторах списков в 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.