如何在 Python 中检查列表是否为回文

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 Python 判断一个列表是否为回文列表。回文是指一个序列,其正序和逆序读取的内容相同。本实验将指导你创建一个 Python 脚本,用于识别列表是否为回文。

你将探索两种方法:一种是使用切片操作将列表与其反转后的版本进行比较;另一种是显式地反转列表再进行比较。本实验提供了代码示例,并说明了如何运行脚本以及如何解读输出结果,以此判断给定的列表是否为回文列表。


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. ~/project 目录下创建一个名为 palindrome.py 的新文件。

    touch ~/project/palindrome.py
  3. 在编辑器中打开 palindrome.py 文件。

现在,让我们在 palindrome.py 文件中添加一些代码,以了解如何检查一个列表是否为回文。

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

## 示例列表
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## 检查列表是否为回文
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

在这段代码中:

  • 我们定义了一个函数 is_palindrome(lst),它接受一个列表 lst 作为输入。
  • 在函数内部,我们使用切片 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. 在你的 VS Code 编辑器中打开 palindrome.py 文件。

  2. palindrome.py 文件的内容修改如下:

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

## 示例列表
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## 检查列表是否为回文
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

在这段修改后的代码中:

  • is_palindrome(lst) 函数内部,我们使用切片 lst[::-1] 创建了输入列表 lst 的反转副本,并将其存储在 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 不是。这种方法使逻辑更加清晰,也更容易理解。

使用切片进行反转

在这一步中,你将专门学习如何在 Python 中使用切片来反转列表。切片是一项强大的功能,它允许你提取列表的部分内容,也可以用于创建列表的反转副本。

让我们重新打开 palindrome.py 文件,更深入地研究切片技术。

  1. 在你的 VS Code 编辑器中打开 palindrome.py 文件。

  2. 确保 palindrome.py 文件的内容如下:

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

## 示例列表
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## 检查列表是否为回文
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")

这段代码的关键部分是 lst[::-1]。这是一个切片操作,用于创建列表的反转副本。让我们来详细分析一下:

  • lst[:] 会创建整个列表的副本。
  • lst[start:end] 会创建一个从索引 startend - 1 的切片。
  • lst[start:end:step] 允许你指定一个 step(步长)。步长为 -1 意味着反向遍历列表。
  • 通过省略 startend 并使用步长 -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

## 示例列表
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]

## 检查列表是否为回文
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(非回文列表)进行了测试,输出结果证实了该函数能够正确识别回文列表。本实验还介绍了显式反转列表进行比较的概念,不过提供的内容有所截断。