Автор оригинала: Chris.
Самый питонический способ проверить, если два заказанных списка L1
и L2
идентичны, это использовать L1
Оператор для элементарного сравнения. Если все элементы равны, и длина списков одинаковы, возвращаемое значение – Правда
Отказ
Проблема : Данные два Списки L1
и L2
Отказ Вы хотите выполнить Логическое сравнение : Сравните списки элемент-мудрых и возврат Правда
Если ваша метрика сравнения возвращается Правда
Для всех пар элементов и в противном случае Ложь
Отказ
Примеры :
l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] # compare(l1, l2) --> False l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3, 5, 4] # compare(l1, l2) --> False l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3, 4, 5] # compare(l1, l2) --> True
Давайте обсудим самые питонные способы решения этой проблемы. Вот быстрое интерактивное обзор кода:
Упражнение : Загляните на все методы и запустите код. Какие вопросы приходят на ум? Вы понимаете каждый метод?
Читайте дальше, чтобы узнать о каждом методе подробно!
Метод 1: Простое сравнение
Не всегда самый простым методом лучший. Но для этой конкретной проблемы это! Оператор равенства ==
сравнивает список элемент-мудрый -Мелые кодеры Python не знают этого!
# 1. Simple Comparison def method_1(l1, l2): return l1 == l2 l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] print(method_1(l1, l2)) # False
Итак, если вы просто хотите узнать о самом питоновом пути решить эту проблему, не смотрите дальше.
Но если вы хотите погрузиться в замечательный мир Python, узнав о разных интересных и мощных функциях Python, читайте!
Способ 2: просто для цикла
Следующий метод – это то, что вы увидите из кодера, исходящего из другого Язык программирования Или от новичка, который не знает о операторе равенства в списках (см. Метод 1 ).
# 2. Simple For Loop def method_2(l1, l2): for i in range(min(len(l1), len(l2))): if l1[i] != l2[i]: return False return len(l1) == len(l2) l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] print(method_2(l1, l2)) # False
В коде вы повторяете все индексы от 0 до последней позиции наименьшего списка, как определено частью Мин (Лен (L1), Лен (L2))
. Затем вы проверяете, отличаются ли оба элементами в той же положении. Если они разные, то есть l1 [я] [я]
Вы можете сразу же вернуться Ложь
Потому что списки тоже разные.
Если вы проходили в целом петля без возврата Ложь
элементы списка похожи. Но один список все еще может быть дольше! Итак, возвращая Лен (L1) (L2)
, вы гарантируете только возвращение Правда
Если (1) все элементы равны и (2) списки имеют одинаковую длину.
Много кода для достижения такой простой вещи! Давайте посмотрим, как лучший кодер будет использовать zip ()
Функция для уменьшения сложность кода.
Метод 3: ZIP () + для цикла
То ZIP функция Занимает ряд поручений и агрегаты их в один, объединяя I-TH значений каждого повторного кортежа в кортеж для каждого I.
Давайте посмотрим, как вы можете использовать функцию, чтобы сделать предыдущий код более кратко:
# 3. Zip + For Loop def method_3(l1, l2): for x, y in zip(l1, l2): if x != y: return False return len(l1) == len(l2) l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] print(method_3(l1, l2)) # False
Вместо того, чтобы итерация по индексам, вы сейчас переживайте на пары элементов (вместе назащиты). Если списки имеют разные размеры, остальные элементы из более длинного списка будут пропущены. Таким образом, элементное сравнение становится проще, и никаких сложных схем индексации не требуется. Избегая индексов с помощью zip ()
Функция наверняка является более питонным способом!
Метод 4: сумма () + zip () + len ()
Но True Python Coders часто избегают петли для цикла и вместо этого используют выражение генератора.
- Сначала вы создаете счетчику логических значений, используя выражение генератора
x для x, y в zip (l1, l2)
Отказ - Тогда ты сумма по поводу логических ценностей (еще один трюк про кодеров Pro), чтобы найти количество элементов, которые одинаковы и хранят его в переменной
num_equal
. - Наконец, вы сравниваете это с длиной обоих списков. Если все три значения одинаковы, оба списка имеют одни и те же элементы, и их длина тоже одинаково. Они равны!
# 4. Sum + Zip + Len def method_4(l1, l2): num_equal = sum(x == y for x, y in zip(l1, l2)) return num_equal == len(l1) == len(l2) l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] print(method_4(l1, l2)) # False print(method_4([1, 2], [1, 2])) # True
Из способов, кроме первого, используя ==
Оператор, это самый питоновый способ из-за использования эффективных функций помощника помощников Python, таких как zip ()
,
Лен ()
и
сумма ()
и выражения генератора, чтобы сделать код более лаконичным и более читаемым.
Вы также можете написать это в Одна линия Кодекс!
sum(x == y for x, y in zip(l1, l2)) == len(l1) == len(l2)
Метод 5: Карта () + Уменьшить () + Лен ()
Последний метод – просто тренировать свои функциональные навыки программирования.
# 5. map() + reduce() + len() from functools import reduce def method_5(l1, l2): equal = map(lambda x, y: x == y, l1, l2) result = reduce(lambda x, y: x and y, equal) return result and len(l1) == len(l2) l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] print(method_5(l1, l2)) # False print(method_5([1, 2, 3], [1, 2, 3])) # True
Карта () Функция Сочетает в себе все пары элементов к логическим значениям (два элемента равны?). Re
DUCE ()
Функция сочетает в себе все логические значения, выполняющие и
операция. Конечно, вы также можете использовать более лаконичный вариант, используя все ()
Функция:
Метод 6: Карта () + Все ()
Это то же самое, что и предыдущий метод, но используя All () Функция вместо Уменьшить ()
объединить все логические значения в глобальном и операция.
# 6. map() + all() def method_6(l1, l2): result = all(map(lambda x, y: x == y, l1, l2)) return result and len(l1) == len(l2) l1 = [1, 2, 3, 4, 5] l2 = [1, 2, 3] print(method_5(l1, l2)) # False print(method_5([1, 2, 3], [1, 2, 3])) # True
Спасибо за прочтение этой статьи до конца! Я надеюсь, что вы узнали что-то новое сегодня. Если вы хотите узнать что-то новое каждый день, присоединяйтесь к моей бесплатной серии электронной почты Python для постоянного улучшения в Python и информатике.
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.
Оригинал: “https://blog.finxter.com/check-if-two-ordered-lists-are-identical/”