На этом шаге мы рассмотрим еще один термин computer science, часто встречающийся в вопросах на собеседованиях: палиндромы. Мы проверим с помощью однострочника, являются ли два слова палиндромами друг друга.
Для начала: что такое палиндром? Палиндром - это последовательность элементов (например, строка или список), которая читается одинаково от начала к концу и наоборот. Рассмотрим несколько забавных примеров палиндромов (без учета пробелов).
Наше однострочное решение потребует некоторых знаний о срезах. Как вы уже знаете, срезы в Python означают "вырезание" диапазона значений из различных типов последовательностей, например строк или списков. Для среза, начинающегося с индекса начало (включая его) и заканчивающего на индексе конец (исключая его), используется очень лаконичная нотация [начало:конец:шаг]. Третий параметр шаг позволяет задавать размер шага - количество элементов исходной последовательности, пропускаемых перед следующим элементом среза (например, шаг=2 означает, что срез будет включать только каждый второй элемент). При отрицательном размере шага последовательность обходится в обратном порядке.
Вот и все, что нужно знать для создания простого и лаконичного однострочного решения на Python.
Наш код должен определять, совпадают ли символы заданной строки символов в обратном порядке с исходной строкой, то есть определять, является ли эта строка палиндромом.
## Однострочник is_palindrome = lambda phrase: phrase == phrase[::-1] ## Результат print(is_palindrome("anna")) print(is_palindrome("kdljfasjf")) print(is_palindrome("rats live on no evil star"))
Наше простое однострочное решение не требует для работы никаких внешних библиотек. Мы описываем лямбда-функцию, которая принимает один аргумент phrase - проверяемую строку символов - и возвращает булево значение, указывающее, остается ли последовательность символов такой же в обратном порядке. Для получения строки символов в обратном порядке мы используем срез.
Результаты этого фрагмента кода выглядят следующим образом:
## Результат print(is_palindrome("anna")) # True print(is_palindrome("kdljfasjf")) # False print(is_palindrome("rats live on no evil star")) # True
Первая и третья строки символов - палиндромы, а вторая - нет. Далее мы займемся еще одним популярным в computer science понятием: перестановками.
На следующем шаге мы рассмотрим подсчет количества перестановок с помощью рекурсивных функций вычисления факториалов.