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

Сравнение и идентичность двух списков в 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('Списки не идентичны')