Рубрики
Без рубрики

Самый питонический способ проверить, будут ли два неупорядоченные списки идентичны

Чтобы проверить, являются ли два неупорядоченных списка X и Y идентичны, сравните преобразованные наборы с SET (X) (Y). Однако это теряет всю информацию о дублированных элементах. Чтобы рассмотреть дубликаты, сравните отсортированные списки сортировкой (X) (Y). Из-за эффективной сортировки слияния, подобных сортировке из сортировки () функции, это довольно быстро для почти сортировков списков. … Самый питонический способ проверить, будут ли два неупорядоченные списки идентичны Подробнее »

Автор оригинала: Chris.

Чтобы проверить, два неупорядоченных списка х и y идентичны, сравните преобразованные наборы с set (x) (y) Отказ Однако это теряет всю информацию о дублированных элементах. Рассмотреть дубликаты, сравните отсортированные списки с Сортировка (x) (y) Отказ Из-за эффективной слияния-сортировки реализации отсортировано () Функция, это довольно быстро для почти сортированных списков.

Проблема : Данные два Списки х и y Отказ Вы хотите вернуть Правда Если оба списка содержат одни и те же элементы, а иначе Ложь Отказ Вариант этой проблемы – игнорировать Дубликаты (что делает эту проблему гораздо проще).

Примеры :

x = [1, 2, 3, 4, 5]
y = [1, 2, 3]
# compare(x, y) --> False

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 5, 4]
# compare(x, y) --> True

x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
# compare(x, y) --> True

Давайте обсудим самые питонные способы решения этой проблемы. Вот быстрое интерактивное обзор кода:

Упражнение : Загляните на все методы и запустите код. Какие вопросы приходят на ум? Вы понимаете каждый метод?

Читайте дальше, чтобы узнать о каждом методе подробно!

Метод 1: установить преобразование

Этот метод предполагает, что вы игнорируете дубликаты. Итак, список [1, 1, 1] и [1] считаются идентичными:

###################
# 1. Set Conversion
###################
def method_1(x, y):
    return set(x) == set(y)

print(method_1([1, 2, 3], [1, 2]))
# False

print(method_1([1, 2], [2, 1]))
# True

Преобразование списка в комплект имеет линейную сложность выполнения. Сравнение двух наборов для равенства также имеет линейную сложность времени выполнения (из-за сложности постоянной среды выполнения установленного членства). Таким образом, в целом сложность выполнения этого метода является линейной в количестве элементов в более широком списке.

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

Метод 2: Multiset с счетчиками коллекции

В Python есть некоторые мультисмета Пакеты, которые способны рассмотреть количество раз, каждый элемент представлен в исходном списке. Один из них – коллекции. Counter учебный класс.

###################
# 2. Collections Counter
###################

import collections

def method_2(x, y):
    return collections.Counter(x) == collections.Counter(y)

print(method_2([1, 1, 1], [1, 1]))
# False

print(method_2([1, 2, 3], [2, 1, 3]))
# True

Этот метод также эффективен, и он скрывает детали реализации, что приводит к более высокой степени развязки в вашем приложении Python. Тем не менее, вы можете не понравиться, что требуется импортировать другую зависимость.

Метод 3: сортировка

Сортировка списка в Python использует высокоэффективный алгоритм, основанный на Mergeort. Это означает, что если список «почти» отсортирован, процедура сортировки очень быстро. Только в абсолютном худшем случае Вычислительная сложность это O (n log n) сортировать список.

Как только оба списка будут отсортированы, вы можете продолжать и использовать оператор сравнения элементов Coritish х == y к Проверьте идентичность двух упорядоченных списков х и y Отказ

###################
# 3. Sorting
###################

def method_3(x, y):
    return sorted(x) == sorted(y)

print(method_2([1, 1, 1], [1, 1]))
# False

print(method_2([1, 2, 3], [2, 1, 3]))
# True

Спасибо за чтение этой статьи! Если вы хотите узнать что-то новое каждый день, присоединяйтесь к моей бесплатной серии электронной почты Python для постоянного улучшения в Python и информатике.

Связанное видео.

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

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.