Как сравнить два списка в python
Перейти к содержимому

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

  • автор:

Сравнение и идентичность двух списков в Python

Если нужен список уникальных элементов в объединении двух списков:

result = list(set(lst1 + lst2)) # ['red', 'white', 'green', 'blue'] 

Симметричная разность двух списков:

result = list(set(lst1) ^ set(lst2)) # ['green', 'blue'] 

Обычная разность(множество из lst1 не входящее в lst2 ):

result = list(set(lst1) - set(lst2)) # ['green','blue'] 

Вариант, сохраняющий порядок с меньшим количеством конверсий типов:

result = [x for x in lst1 if x in set(lst2))] 

Как сравнить поиндексно значения двух списков?

Имеем два списка:

lit1 = [23, 56, 78, 69] lit2 = [11, 89, 33, 45] 

Задача состоит в том, чтобы сравнить эти списки поиндексно, при сравнении меньший элемент вынести в отдельный список result .

Смотрим решение с комментариями к коду:

list1 = [23, 56, 78, 69] list2 = [11, 89, 33, 45] # список для результата result = [] # перебираем элементы списка # в пределах длины первого списка for i in range(len(lst1)): # сравниваем элементы первого списка # с элементами второго списка if lst1[i]  lst2[i]: # добавляем в итоговый список `result` # элемент из первого, если он меньше result.append(list1[i]) else: # иначе - добавляем элемент из второго списка result.append(list2[i]) # выводим итоговый список print(result) 

Код выше можно записать короче, при помощи выражения-генератора списка или функции map()

result = [min(p) for p in zip(list1, list2)] # или result = list(map(min, zip(l1, l2))) 

Вычисление идентичности двух списков в Python.

Задача состоит в том, чтобы проверить, содержат ли два списка точно одинаковые элементы. Это довольно полезная распространенная задача.

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

Метод списка list.sort() сортирует его на месте (т.е. не создает новый). Если необходимо сохранить начальную сортировку списков, то для сортировки используйте функцию sorted() , она создаст новый отсортированный список, который можно сравнивать.

lst1 = [5, 3, 1, 2, 4] lst2 = [1, 2, 4, 3, 5] if lst1.sort() == lst2.sort(): print('Списки идентичны') else: print('Списки не идентичны') 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Список Python как аргумент по умолчанию
  • Использование списка в качестве стека
  • Использование списка в качестве очереди
  • Генератор списка list
  • Эффективное использование генераторов списков
  • Операция присваивания на месте и списки
  • Поведение списков Python в разных областях видимости
  • Сравнение и идентичность двух списков
  • Как получить несколько последних элементов списка

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

Давайте предположим, что у вас есть два списка, которые содержат одинаковые элементы. Однако эти элементы стоят в разном порядке. Например:

one = [33, 22, 11, 44, 55] two = [22, 11, 44, 55, 33]

Два приведенных выше списка содержат одни и те же элементы, а вот их порядок отличается. Давайте посмотрим, как мы можем удостовериться, что перед нами два одинаковых списка.

  • Мы можем использовать метод collections.Counter
  • Можно использовать sorted(), если объекты поддаются порядку.
from collections import Counter one = [33, 22, 11, 44, 55] two = [22, 11, 44, 55, 33] print("Эквивалентны ли эти два списка?", Counter(one) == Counter(two))
'Эквивалентны ли эти два списка?', True

Python: сравнение двух списков

Здравствуйте. Задача простая: есть список№1 и список№2. Списки большие, хранят разные строки. Нужно из них получить некий diff, то есть два списка — в одном все строки, которые были добавлены по сравнению с первым списком и во втором — все, которые были удалены по сравнению с первым списком. Кривовато объяснил, но должно быть понятно. Как это быстрее и проще всего реализуется?

anonymous
25.05.07 16:43:07 MSD

grob ★★★★★
( 25.05.07 16:50:13 MSD )
Ответ на: комментарий от grob 25.05.07 16:50:13 MSD

Я не зря написал в заголовке слово «Python». Там есть «умные» списки, в которых, возможно, уже реализованы эти алгоритмы. Я в этом плане спрашивал.

anonymous
( 25.05.07 17:27:19 MSD )
Ответ на: комментарий от anonymous 25.05.07 17:27:19 MSD

У пистонщиков совсем мозги дурью заплыли? Набери в гугле python list intersection, нажми I’m feeling lucky. Потом набери python getting difference between lists, и так же нажми I’m feeling lucky. Хорошо быть счастливым?

logIN ☆
( 25.05.07 19:36:41 MSD )
Ответ на: комментарий от logIN 25.05.07 19:36:41 MSD

Спасибо за ценный совет, но я уже искал, поэтому и создал тему. Не знаете ответ на вопрос — не отвечайте. Вас никто не просит «учить».

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

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

Обновлено: 2023-06-23 18:28:10 Сергей Бензенко автор материала

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

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

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