Сравнение списков в 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»