Сообщить об ошибке.

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

В материале представлены разные подходы к сравнению двух списков и вычисления их идентичности.

Синтаксис:


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

Допустим есть 2 списка:

lst2 = ['red', 'blue', 'green', 'white']
lst1 = ['red', 'white']

Стоит задача сравнить эти списки, при этом совпадающие элементы вывести в отдельный список result. Решение состоит в нахождении пересечения обоих списков

result=list(set(lst1) & set(lst2))
# ['red', 'white']

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

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('Списки не идентичны')