Как сравнить два списка в 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")
Результат:
OutputThe 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")
Результат:
OutputThe 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")
Результат:
OutputThe 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")
Результат:
OutputLists 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")
Результат:
OutputThe 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.