В материале представлены разные подходы к сравнению двух списков и вычисления их идентичности.
Допустим есть 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)))
Задача состоит в том, чтобы проверить, содержат ли два списка точно одинаковые элементы, то есть проверить их идентичность. Это довольно полезная распространенная задача.
Так как оператор ==
сравнивает списки по индексно с лева - направо, то решение состоит в том, чтобы перед их сравнением - списки отсортировать, ведь заранее мы не знаем, упорядочены они или нет.
Метод списка list.sort()
сортирует его на месте (т.е. изменяет). Если необходимо сохранить начальную сортировку списков, то для сортировки используйте функцию sorted()
, она создаст новый отсортированный список, который можно сравнивать.
lst1 = [5, 3, 1, 2, 4]
lst2 = [1, 2, 4, 3, 5]
if lst1.sort() == lst2.sort():
print('Списки идентичны')
else:
print('Списки не идентичны')