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