Python все элементы массива равны

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

Python предоставляет несколько способов сравнения двух списков. Сравнение – это процесс, когда элементы данных сравниваются с другим элементом данных списка, независимо от того, совпадают они или нет.

list1 - [11, 12, 13, 14, 15] list2 - [11, 12, 13, 14, 15] Output - The lists are equal

Ниже приведены методы сравнения двух списков в Python.

Функция cmp()

Функция Python cmp() сравнивает два объекта Python и возвращает целочисленные значения -1, 0, 1 согласно сравнению.

Примечание. Не используется в версии Python 3.x.

Set() функция и оператор ==

Функция Python set() преобразовывает список в набор, не заботясь о порядке элементов. Кроме того, мы используем оператор равенства (==) для сравнения элементов данных в списке. Разберем на следующем примере.

list1 = [11, 12, 13, 14, 15] list2 = [12, 13, 11, 15, 14] a = set(list1) b = set(list2) if a == b: print("The list1 and list2 are equal") else: print("The list1 and list2 are not equal")
The list1 and list2 are equal

В приведенном выше примере мы объявили два списка для сравнения друг с другом. Мы преобразовали эти списки в набор и сравнили каждый элемент с помощью оператора ==. Все элементы равны в обоих списках, тогда, если блок выполнен, распечатывается результат.

Читайте также:  Util date model java

Метод sort() с оператором ==

Функция Python sort() используется для сортировки списков. Элементы одного и того же списка имеют одинаковую позицию индекса, это означает, что списки равны.

Примечание. В методе sort() мы можем передавать элементы списка в любом порядке, потому что мы сортируем список перед сравнением.

Разберем метод в следующем примере.

import collections list1 = [10, 20, 30, 40, 50, 60] list2 = [10, 20, 30, 50, 40, 70] list3 = [50, 10, 30, 20, 60, 40] # Sorting the list list1.sort() list2.sort() list3.sort() if list1 == list2: print("The list1 and list2 are the same") else: print("The list1 and list3 are not the same") if list1 == list3: print("The list1 and list2 are not the same") else: print("The list1 and list2 are not the same")
The list1 and list3 are not the same The list1 and list2 are not the same

Collection.counter()

Модуль сбора представляет counter(), который эффективно сравнивает список. Он хранит данные в формате словаря : и подсчитывает частоту элементов списка.

Примечание. Порядок элементов списка не имеет значения в этой функции.

import collections list1 = [10, 20, 30, 40, 50, 60] list2 = [10, 20, 30, 50, 40, 70] list3 = [50, 10, 30, 20, 60, 40] if collections.Counter(list1) == collections.Counter(list2): print("The lists l1 and l2 are the same") else: print("The lists l1 and l2 are not the same") if collections.Counter(list1) == collections.Counter(list3): print("The lists l1 and l3 are the same") else: print("The lists l1 and l3 are not the same")
The lists list1 and list2 are not the same The lists list1 and list3 are the same

Reduce() и map()

Функция map() принимает функцию и повторяемый объект Python (список, кортеж, строку и т. д.) в качестве аргументов и возвращает объект. Функция реализуется для каждого элемента списка и в результате возвращает итератор.

Кроме того, метод reduce() рекурсивно реализует данную функцию итерируемому объекту.

Здесь мы будем использовать оба метода в комбинации. Функция map() будет реализовывать функцию (она может быть определяемая пользователем или лямбда-функция) для каждого итеративного объекта, а функция reduce() позаботится о том, чтобы применялся рекурсивный образ.

Примечание. Чтобы использовать функцию reduce(), нужно импортировать модуль functool.

Рассмотрим следующий пример.

import functools list1 = [10, 20, 30, 40, 50] list2 = [10, 20, 30, 50, 40, 60, 70] list3 = [10, 20, 30, 40, 50] if functools.reduce(lambda x, y: x and y, map(lambda a, b: a == b, list1, list2), True): print("The list1 and list2 are the same") else: print("The list1 and list2 are not the same") if functools.reduce(lambda x, y: x and y, map(lambda a, b: a == b, list1, list3), True): print("The list1 and list3 are the same") else: print("The list1 and list3 are not the same")
The list1 and list2 are not the same The list1 and list3 are the same

Источник

Проверить массивы на равенство, при этом порядок не важен

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

a = [1,2,3] b = [2,1,3] # массивы a и b равны по элементам, но не равны по порядку 

5 ответов 5

Сравнить сортированные версии:

a = [1,2,3] b = [2,1,3] a.sort() b.sort() if a == b: print("ok") 

Можно использовать collections.Counter и сравнение полученных словарей. В отличие от варианта с сортировкой, этот способ сработает даже если в списке находятся объекты разных типов.

import collections a = [1,2,3] b = [2,1,3] ac = collections.Counter(a) bc = collections.Counter(b) print(ac == bc) # True 

Кстати о скорости – создание словарей и их сравнение работает за O(n) , в отличие от сортировки за O(n log n) .

a = [1, 2, 3] b = [2, 3, 1] print(sorted(a) == sorted(b)) 

Все зависит от нужного времени выполнения. Встроенная сортировка работает за O(n log n)

как вариант, не самый лучший

all(a.count(x) == b.count(x) for x in set(a+b)) 
a = [1,2,3] b = [2,1,3] # массивы a и b равны по элементам, но не равны по порядку def is_equal(l1, l2): this_is_succf_cross_eq_end = False this_is_succf_end_row=False is_in_array=False res = 'ne ravni' el_has_passed= False for elem in range(len(l1)): for elem_another in range(len(l2)): is_in_array = elem_another < len(l2) if l1[elem]==l2[elem_another] and is_in_array: el_has_passed=True is_in_array = elem_another == len(l2)-1 print("is_in_array",is_in_array) if is_in_array and el_has_passed: this_is_succf_cross_eq_end = True print("opp!") continue else: this_is_succf_cross_eq_end=False print("nnn") break if this_is_succf_cross_eq_end: res = 'ravni' return res if __name__ == '__main__': print(is_equal(a,b)) #--->ravni a[0]=8 print(is_equal(a, b)) #--->ne ravni 

Вот исправленный(Ух запарился я ребятки,зато сам кое-что разобрал:)) С одинаковой размерностью:

a = [1,2,3] b = [3,1,2] # массивы a и b равны по элементам, но не равны по порядку def is_equal(l1, l2): res = 'ne ravni' el_has_passed= False passed_row_l=[] for elem in range(len(l1)): for elem_another in range(len(l2)): # print("fix elem",l1[elem]) # print("another elem",l2[elem_another]) if l1[elem]==l2[elem_another] : el_has_passed=True break else: el_has_passed=False # print("el has passed",el_has_passed) if el_has_passed: passed_row_l.append(1) else: passed_row_l.append(0) # print("l",passed_row_l) if sum(passed_row_l)==len(l1): res = 'ravni' return res if __name__ == '__main__': # Проверял для списков одинаковой размерности print(is_equal(a,b)) #--->ravni a.append(8) b.append(9) print(is_equal(a, b)) #--->ne ravni b[-1]=8 print(is_equal(a, b)) #--->ravni 

Источник

Как сравнивать списки в Python: техники и методы

Как сравнивать списки в Python: техники и методы

Одним из наиболее используемых типов данных являются списки. Списки в Python — это упорядоченные коллекции элементов, которые могут быть разных типов. В этой статье мы обсудим различные способы сравнения списков в Python.

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

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

list1 = [1, 2, 3] list2 = [1, 2, 3] if list1 == list2: print("Списки равны") else: print("Списки не равны")

В этом случае, Python сравнит каждый элемент списка list1 с соответствующим элементом списка list2 . Если все элементы равны, то списки считаются равными.

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

Иногда важно узнать, являются ли два списка не просто равными, но и идентичными — то есть, являются ли они одним и тем же объектом. Для этого в Python есть оператор is .

list1 = [1, 2, 3] list2 = list1 # list2 теперь ссылается на тот же объект, что и list1 if list1 is list2: print("Списки идентичны") else: print("Списки не идентичны")

Сравнение списков по содержанию

Иногда нужно проверить, содержат ли два списка одни и те же элементы, но не обязательно в одном и том же порядке. В этом случае можно использовать функцию sorted() .

list1 = [1, 2, 3] list2 = [3, 2, 1] if sorted(list1) == sorted(list2): print("Списки содержат одни и те же элементы") else: print("Списки содержат разные элементы")

Сравнение списков по длине

Другой частый случай — сравнение списков по длине. Для этого в Python есть встроенная функция len() .

list1 = [1, 2, 3] list2 = [4, 5, 6, 7] if len(list1) == len(list2): print("Списки имеют одинаковую длину") else: print("Списки имеют разную длину")

Использование set для сравнения

Иногда необходимо сравнить два списка на предмет того, содержат ли они одинаковые элементы, независимо от их количества. В Python для этого можно использовать тип данных set (множество), который автоматически удаляет дубликаты и не учитывает порядок элементов.

list1 = [1, 2, 3, 3, 2, 1] list2 = [1, 2, 3] if set(list1) == set(list2): print("Списки содержат одни и те же уникальные элементы") else: print("Списки содержат разные уникальные элементы")

Использование встроенной функции cmp()

В Python 2.x для сравнения списков можно было использовать функцию cmp() . Эта функция сравнивала списки поэлементно и возвращала -1, если первый список меньше второго, 0 — если списки равны, и 1 — если первый список больше второго. Однако в Python 3.x эта функция была удалена. Если вам нужно реализовать аналогичное поведение, вы можете воспользоваться функцией zip() .

list1 = [1, 2, 3] list2 = [1, 2, 4] for a, b in zip(list1, list2): if a < b: print("Первый список меньше второго") break elif a >b: print("Первый список больше второго") break else: if len(list1) < len(list2): print("Первый список меньше второго") elif len(list1) >len(list2): print("Первый список больше второго") else: print("Списки равны")

Заключение

Важно помнить, что разные методы сравнения подходят для разных задач, и выбор метода зависит от конкретной ситуации.

Существуют и другие методы сравнения списков, например, с помощью библиотеки numpy или использованием циклов и условий, но основные принципы остаются теми же. Выбирайте тот метод, который наиболее подходит для вашей задачи, и помните, что Python — это инструмент, который должен помогать вам, а не усложнять работу.

Источник

Оцените статью