Как сравнить два списка в Python

В данной статье мы рассмотрим разные методы сравнения двух списков в Python.

Способы сравнения двух списков в Python

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

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

1. Возможности reduce() и map()

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

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

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

Пример

import functoolsl1 = [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 одинаковые

2. Способ 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 одинаковые

3. Способ sort() и оператор ==

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

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

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

Пример

import collectionsl1 = [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 неодинаковые

4. Способ 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 одинаковые

5. 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *