Сравнение и идентичность двух списков в 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
Решить данную задачу на языке Python можно несколькими способами. Классический вариант — брать по очереди элементы списка и сравнить каждый со стоящими за ним. При первом же совпадении элементов делается вывод, что в списке есть одинаковы элементы и работа программы завершается.
Еще одним способом решения может быть использование типа данных «множества» ( set ). Как известно, в множествах не может быть одинаковых элементов. При преобразовании списка во множество в нем одинаковые элементы будут представлены единожды, то есть дубли удалятся. Если после этого сравнить длину исходного списка и множества, то станет ясно, есть ли в списке одинаковые элементы. Если длины совпадают, значит все элементы списка уникальны. Если нет, значит, были одинаковые элементы.
Допустим, исходный список генерируется таким кодом:
from random import random N = 10 arr = [0] * N for i in range(N): arr[i] = int(random() * 50) print(arr)
Пример решения классическим способом:
for i in range(N-1): for j in range(i+1, N): if arr[i] == arr[j]: print("Есть одинаковые") quit() print("Все элементы уникальны")
Здесь j принимает значения от следующего элемента за тем, для которого ищется совпадение, до последнего в списке. Сравнивать элемент с индексом i с элементами, стоящими впереди него, не надо, т. к. эти сравнения уже выполнялись на предыдущих итерациях внешнего цикла.
Решение задачи с помощью множества:
setarr = set(arr) if len(arr) == len(setarr): print("Все элементы уникальны") else: print("Есть одинаковые")
Функция set преобразует список во множество.
Примеры выполнения кода:
[2, 4, 1, 2, 45, 38, 26, 11, 49, 25] Есть одинаковые
[44, 49, 21, 19, 23, 27, 34, 9, 41, 31] Все элементы уникальны
В Python у списков есть метод count , который подсчитывает количество элементов списка, чьи значения совпадают с переданным в метод значением. Таким образом мы можем решить задачу, перебирая элементы списка и передавая каждый в метод count(item) . Если хотя бы однажны метод вернет число больше 1, значит в списке имеются повторы значений.
from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) for item in arr: if arr.count(item) > 1: print("Есть одинаковые") break else: print("Все элементы уникальны")
В программе выше ветка else цикла for срабатывает только в случае, если работа цикла не была прервана с помощью оператора break .
В более сложном варианте данной задачи может требоваться определить неуникальные элементы, то есть выявить значения, которые встречаются в списке более одного раза, а не просто сказать, есть повторы или нет. Здесь мы не можем использовать прерывание цикла, так как в списке может повторяться и другое значение. Также не можем для всех элементов списка вызывать count() , так как в этом случае метод будет вызываться повторно для уже учтенных ранее значений. Например, результат работы такой программы
from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) for item in arr: count = arr.count(item) if count > 1: print(f"Элемент встречается раз")
может выглядеть так:
9 36 43 21 48 6 19 13 3 48 Элемент 48 встречается 2 раз Элемент 48 встречается 2 раз
Чтобы исключить из перебора повторы значений, мы можем преобразовать список во множество. После этого перебирать в цикле элементы множества, которые уникальны.
from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) setarr = set(arr) for item in setarr: count = arr.count(item) if count > 1: print(f"Элемент встречается раз")
X Скрыть Наверх
Решение задач на Python
сравнение элементов списка
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.
zaivanza
Новичок
Пользователь
Дек 28, 2021 28 1 3
вот у меня есть два списка
mas1 = [‘BTC_USDT 48956.76’, ‘ETH_USDT 3901.36’, ‘DOT_USDT 28.12’]
mas2 = [‘BTCUSDT 48978.56000000’, ‘DOTUSDT 27.1000000’, ‘ETHUSDT 3902.36000000’]
Как сравнивать числа элементов одного списка с другим, если они разбросаны не по порядку?
То есть мне нужно сравнить DOTUSDT (mas2) c DOT_USDT (mas1)
stud_55
Модератор
Команда форума
Модератор
Апр 3, 2020 1 522 671 113
Как сравнивать числа элементов одного списка с другим, если они разбросаны не по порядку?
То есть мне нужно сравнить DOTUSDT (mas2) c DOT_USDT (mas1)
Можно преобразовать списки в словари, потом в цикле сравнить значение по каждому ключу:
mas1 = ['BTC_USDT 48956.76', 'ETH_USDT 3901.36', 'DOT_USDT 28.12'] mas2 = ['BTCUSDT 48978.56000000', 'DOTUSDT 27.1000000', 'ETHUSDT 3902.36000000'] d1 = d2 = def compare(k1, k2): if d1[k1] > d2[k2]: print(f" (mas1) > (mas2)") elif d1[k1] == d2[k2]: print(f" (mas1) == (mas2)") else: print(f" (mas1) < (mas2)") # сравнение значений по всем ключам for k1, v1 in d1.items(): k2 = k1.replace('_', '') compare(k1, k2) # сравнение значений по одному ключу compare('DOT_USDT', 'DOTUSDT')
Сравнение списков в 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.