Сравнение списков в Python

В этой статье мы рассмотрим различные способы, позволяющие осуществить сравнение  списков в Python.

Сравнение списков в Python - возможные методы

Для сравнения можно использовать следующие функции:

  • reduce() и map();
  • collection.counter();
  • sort() вместе с оператором ==;
  • set() вместе с оператором ==;
  • List Comprehension.

Функции reduce() и map()

Мы можем использовать функцию map() вместе с functools.reduce() для сравнения элементов двух списков. Метод map() принимает в качестве аргументов функцию и коллекцию (список, кортеж, строку и т. д.). Он применяет переданную функцию к каждому элементу перебираемого объекта и возвращает коллекцию.

Метод functools.reduce() применяет переданную функцию к каждому переданному элементу рекурсивным способом.

Метод map() применит переданную функцию к каждому элементу, а reduce() обеспечит ее последовательное применение.

Пример

import functools

l1 = [10, 20, 30, 40, 50]
l2 = [10, 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 ("Списки l1 и l2 одинаковые")
else:
	print ("Списки l1 и l2 не одинаковые")

if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True):
	print ("Списки l1 и l3 одинаковые")
else:
	print ("Списки l1 и l3 не одинаковые")

Вывод

Списки l1 и l2 не одинаковые
Списки l1 и l3 одинаковые

Метод collection.counter()

Метод collection.counter() может использоваться для сравнения списков. Функция counter() подсчитывает частоту элементов в списке и сохраняет данные в виде словаря, представленного в формате <значение>: <частота>. Если два списка имеют одинаковый выходной словарь, то они одинаковы.

Примечание: порядок элементов списка не влияет на результат работы метода counter().

Пример

import collections 

l1 = [10, 20, 30, 40, 50]
l2 = [10, 20, 30, 50, 40, 70]
l3 = [10, 20, 30, 40, 50]

if collections.Counter(l1) == collections.Counter(l2):
	print ("Списки l1 и l2 одинаковые")
else:
	print ("Списки l1 и l2 неодинаковые")

if collections.Counter(l1) == collections.Counter(l3):
	print ("Списки l1 и l3 одинаковые")
else:
	print ("Списки l1 и l3 неодинаковые")

Вывод

Списки l1 и l2 неодинаковые
Списки l1 и l3 одинаковые

Метод sort() и оператор ==

Для сравнения двух списков можно использовать метод sort() вместе с оператором ==. Метод sort() используется для сортировки таким образом, чтобы элементы в двух списках находились на одинаковых позициях.

Примечание: порядок элементов не влияет на результат, поскольку мы будем сортировать списки перед сравнением.

Оператор == используется для сравнения списков элемент за элементом.

Пример

import collections

l1 = [10, 20, 30, 40, 50]
l2 = [10, 20, 30, 50, 40, 70]
l3 = [50, 10, 30, 20, 40]

l1.sort()
l2.sort()
l3.sort()

if l1 == l3:
	print ("Списки l1 и l3 одинаковые")
else:
	print ("Списки l1 и l3 неодинаковые")
if l1 == l2:
	print ("Списки l1 и l2 одинаковые")
else:
	print ("Списки l1 и l2 неодинаковые")

Вывод

Списки l1 и l3 одинаковые
Списки l1 и l2 неодинаковые

Метод set() и оператор ==

Метод set() управляет элементами отсортированных последовательностей без учета их порядка. Оператор ==используется для сравнения списков поэлементно.

Пример

l1 = [10, 20, 30, 40, 50]
l3 = [50, 10, 30, 20, 40]

a = set(l1)
b = set(l3)

if a == b:
	print("Списки l1 и l3 одинаковые")
else:
	print("Списки l1 и l3 не одинаковые")

Вывод

Списки l1 и l3 одинаковые

List Comprehension

List Comprehension можно использовать для сравнения двух списков.

Пример

l1 = [10, 20, 30, 40, 50]
l3 = [50, 75, 30, 20, 40, 69]

res = [x for x in l1 + l3 if x not in l1 or x not in l3]
print(res)

if not res:
	print("Списки l1 и l3 одинаковые")
else:
	print("Списки l1 и l3 не одинаковые")

В приведенном выше коде мы устанавливаем элемент указателя x на список l1 и l3. Далее мы проверяем, присутствует ли элемент в списках.

Вывод

[10, 75, 69]
Списки l1 и l3 неодинаковые

Заключение

В этой статье мы рассмотрели несколько способов сравнения списков в Python.

Сергей Бензенкоавтор-переводчик статьи «How to Compare Two Lists in Python»

Пожалуйста, оставьте свои отзывы по текущей теме статьи. Мы очень благодарим вас за ваши комментарии, отклики, подписки, дизлайки, лайки!