Как проверить, является ли список палиндромом в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Вы рассмотрите два метода: сравнение списка с его обратной версией с использованием срезов (slicing) и явное обращение списка для сравнения. В практическом занятии приведены примеры кода и инструкции по запуску скрипта и интерпретации вывода, которые показывают, являются ли заданные списки палиндромами или нет.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/lists -.-> lab-559532{{"Как проверить, является ли список палиндромом в Python"}} python/function_definition -.-> lab-559532{{"Как проверить, является ли список палиндромом в Python"}} python/data_collections -.-> lab-559532{{"Как проверить, является ли список палиндромом в Python"}} end

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

На этом этапе вы узнаете о палиндромах списков и о том, как их определять на Python. Палиндром - это последовательность, которая читается одинаково как с начала до конца, так и с конца до начала. Например, слово "madam" является палиндромом. В контексте списков палиндром списка - это список, элементы которого одинаковы при чтении с начала до конца или с конца до начала.

Начнем с создания скрипта на Python для исследования палиндромов списков.

  1. Откройте редактор VS Code.

  2. Создайте новый файл с именем palindrome.py в директории ~/project.

    touch ~/project/palindrome.py
  3. Откройте файл palindrome.py в редакторе.

Теперь добавим некоторый код в файл palindrome.py, чтобы понять, как проверить, является ли список палиндромом.

def is_palindrome(lst):
    return lst == lst[::-1]

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

В этом коде:

  • Мы определяем функцию is_palindrome(lst), которая принимает список lst в качестве входных данных.
  • Внутри функции мы сравниваем список с его обратной версией, используя срез (slicing) lst[::-1].
  • Функция возвращает True, если список является палиндромом, и False в противном случае.
  • Мы создаем два примера списков: list1, который является палиндромом, и list2, который не является палиндромом.
  • Мы используем функцию print(), чтобы показать, является ли каждый список палиндромом или нет.

Чтобы запустить скрипт, выполните следующую команду в терминале:

python ~/project/palindrome.py

Вы должны увидеть следующий вывод:

[1, 2, 3, 2, 1] is a palindrome: True
[1, 2, 3, 4, 5] is a palindrome: False

Этот вывод подтверждает, что list1 является палиндромом, а list2 - нет.

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

На этом этапе вы рассмотрите другой метод проверки, является ли список палиндромом, путем явного обращения списка и сравнения его с исходным списком. Этот подход позволяет более детально понять процесс проверки на палиндром.

Давайте изменим файл palindrome.py, который вы создали на предыдущем этапе.

  1. Откройте файл palindrome.py в редакторе VS Code.

  2. Измените содержимое файла palindrome.py следующим образом:

def is_palindrome(lst):
    reversed_lst = lst[::-1]
    return lst == reversed_lst

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

В этом измененном коде:

  • Внутри функции is_palindrome(lst) мы создаем обратную копию входного списка lst с использованием среза (slicing) lst[::-1] и сохраняем ее в переменной reversed_lst.
  • Затем мы сравниваем исходный список lst с обратным списком reversed_lst с помощью оператора равенства ==.
  • Функция возвращает True, если исходный список равен обратному списку (то есть является палиндромом), и False в противном случае.

Чтобы запустить скрипт, выполните следующую команду в терминале:

python ~/project/palindrome.py

Вы должны увидеть такой же вывод, как на предыдущем этапе:

[1, 2, 3, 2, 1] is a palindrome: True
[1, 2, 3, 4, 5] is a palindrome: False

Этот вывод подтверждает, что list1 является палиндромом, а list2 - нет, с использованием метода явного обращения списка. Этот подход делает логику более явной и легкой для понимания.

Использование срезов (slicing) для обращения списка

На этом этапе вы сосредоточитесь на том, как в Python можно использовать срезы (slicing) для обращения списка. Срезы - это мощный инструмент, который позволяет извлекать части списка, а также создавать обратную копию списка.

Вернемся к файлу palindrome.py и рассмотрим метод срезов более подробно.

  1. Откройте файл palindrome.py в редакторе VS Code.

  2. Убедитесь, что содержимое файла palindrome.py выглядит следующим образом:

def is_palindrome(lst):
    reversed_lst = lst[::-1]
    return lst == reversed_lst

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

Ключевой частью этого кода является lst[::-1]. Это операция среза (slicing), которая создает обратную копию списка. Разберем ее:

  • lst[:] создаст копию всего списка.
  • lst[start:end] создаст срез от индекса start до end - 1.
  • lst[start:end:step] позволяет указать step (шаг). Шаг -1 означает итерацию по списку в обратном порядке.
  • Пропустив start и end и использовав шаг -1 (то есть lst[::-1]), вы создаете обратную копию всего списка.

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

def is_palindrome(lst):
    reversed_lst = lst[::-1]
    print(f"Original list: {lst}")
    print(f"Reversed list: {reversed_lst}")
    return lst == reversed_lst

## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

Теперь запустите скрипт еще раз:

python ~/project/palindrome.py

Вы увидите исходный и обратный списки, выведенные перед результатом проверки на палиндром:

Original list: [1, 2, 3, 2, 1]
Reversed list: [1, 2, 3, 2, 1]
[1, 2, 3, 2, 1] is a palindrome: True
Original list: [1, 2, 3, 4, 5]
Reversed list: [5, 4, 3, 2, 1]
[1, 2, 3, 4, 5] is a palindrome: False

Это демонстрирует, как срез [::-1] эффективно обращает список, который затем используется для определения, является ли исходный список палиндромом.

Резюме

В этом практическом занятии (лабораторной работе) вы научились определять палиндромные списки в Python. Палиндромный список - это список, который читается одинаково как с начала, так и с конца. Вы создали скрипт palindrome.py, содержащий функцию is_palindrome(lst), которая использует срез (lst[::-1]) для эффективного обращения списка и сравнения его с исходным. Функция возвращает True, если список является палиндромом, и False в противном случае.

Скрипт был протестирован на двух примерах списков: list1 (палиндром) и list2 (не палиндром). Вывод программы подтвердил, что функция может правильно определять палиндромы. В рамках практического занятия также был рассмотрен подход явного обращения списка для сравнения, хотя предоставленное содержание было урезано.