Python 中 [::-1] 的作用?

2025年3月6日 | 阅读 7 分钟

在下面的教程中,我们将学习 [::-1] 在 Python 中的用法。

反转 Python 中的可迭代对象

在 Python 中,反转具有顺序的字符串、列表或任何其他可迭代对象用 [::-1] 表示。

例如

输出

 
dlrow olleH
[8, 7, 6, 5]

说明

此程序使用 Python 的切片机制 [::-1] 来反转列表 num 和字符串 hello。打印时,字符串和列表会有效地反转,因为切片 [::-1] 以反向顺序遍历序列。输出显示了反转顺序的列表和字符串。

但我从未想过要学习它到底是如何工作的,所以我不得不经常查找如何在 Python 中反转 列表

要完全理解 [::-1] 在语言中的工作原理,您必须掌握 Python 切片。此外,在理解切片之前,您最好理解索引,特别是负索引。

Python 中的索引

要访问 Python 可迭代对象(如列表)中的元素,必须使用与元素位置匹配的索引。Python 索引基于零。

让我们来看一个列表索引的例子。

输出

 
5 6

说明

列表 nums 包含四个整数。列表的第一个和第二个元素分别赋给变量 first 和 second。当我们打印这些变量时,我们得到输出 5 6。

其他 可迭代对象,包括 字符串元组字典,都可以使用相同的方法进行索引。

例如,让我们使用索引来检索字符串的字符

输出

 
H e

说明

这行 Python 代码将字符串变量 word 初始化为值 "Hello"。之后,使用索引来获取字符串的第一个和第二个字符,它们分别分配给变量 first 和 second。在打印 first 和 second 值后,会产生输出 "H e",这说明了 Python 中字符串索引的基础知识。单个字符可以根据它们在字符串中的位置进行访问,从索引 0 开始。

Python 中的负索引

负索引是访问 Python 中序列值的另一种方法。

负索引允许相对于序列的末尾访问元素。

示例

输出

 
4 3

说明

Python 代码创建了一个名为 nums 的列表,其值为 [1, 2, 3, 4]。然后它使用负索引从列表末尾访问元素。通过使用 -1,它检索最后一个元素,即 4。使用 -2,它获得倒数第二个元素,即 3。最后打印 last 和 second_last 的值后,得到输出 "4 3"。由于 -1 表示最后一个元素,-2 表示倒数第二个,以此类推,负索引允许从列表末尾访问元素。

现在您知道 Python 索引是如何工作的了。接下来,让我们讨论切片。

Python 中的切片

Python 中的切片是访问序列(如列表或字符串)一部分的方法。它允许您通过指定范围来提取特定元素。这使得对元素的访问、修改和删除变得清晰且简洁。

切片与索引功能类似;然而,它检索多个值而不是一个。

切片使用索引来检索各种项。此外,这些索引是基于零的。

切片语法

Python 中有两种方法可以对可迭代对象进行切片

这样,您就可以从索引 start 开始,在 stop 索引前停止,检索一系列元素。换句话说,它生成 sequence[start]、sequence[end - 1] 以及所有中间值。

在 Python 中,您还可以通过以下方式分割可迭代对象

这意味着您将获得一个从开始到结束的步长范围内的项。

输出

 
[4, 5, 6]

说明

这种方法提供了一种清晰的方法来提取列表的特定部分,允许根据开始和结束索引选择列表的连续部分。

让我们再举一个例子,获取列表中第四个到第八个元素之间的每第二个值。要做到这一点,除了 start 和 stop 之外,我们还需要提供步长。

输出

 
[4, 6, 8]

说明

此语法通过允许您根据指定的步长选择列表的子集并跳过元素,从而为您生成自定义子序列提供了灵活性。

Python 中的负切片

与负索引一样,Python 也允许负切片。这意味着您可以从序列的末尾开始切片。

例如,让我们检索列表中最后三个值

输出

 
[4, 5, 6]

说明

Python 代码定义了一个列表 nums,其中使用列表切片 [-4:-1] 获取子列表,从索引 -4 到索引 -1。使用负索引进行列表切片在根据元素相对位置访问元素方面提供了灵活性,并且易于从列表末尾删除元素。在这里,切片从列表中的倒数第四个条目(索引 -4)开始,在最后一个条目(索引 -1)处停止。

此外,步长也可以是负数。这样做会改变切片的 D方向。这意味着在切片序列时,它从 stop 索引之后的元素开始,一直到 start 索引(但不包括 start 索引)。

示例

输出

 
[5, 4, 3]

说明

Python 代码通过从索引 4 向下切片到索引 1 创建了一个名为 nums 的列表。这产生了子列表 [5,4,3]。列表切片中的负步长使列表操作变得灵活,它允许以反向顺序提取元素。

为了弄清楚这是如何工作的

  • 由于步长为负,切片被反转。
  • 由于 stop 是 1,切片在 1+1 处结束,即第二个元素。
  • 由于 start 是 4,切片从元素 5(索引 4)开始。

从切片中省略 start 和 stop

如果您希望从序列的开头开始切片,可以省略 start 值。

例如,让我们检索列表中前四个值。您可以通过仅将 4 指定为 stop 并省略 0 作为 start 来实现此目的

输出

 
[1, 2, 3, 4]

说明

此示例演示了如何切片 Python 中的 列表。通过使用 nums[:4],我们得到 nums 列表的前四个元素,结果是 [1, 2, 3, 4]。此切片从列表开头开始,包含索引 4 之前的所有元素。

让我们举一个例子,我们获取整数列表中第三个元素之后的所有值。为此,您只需提供 start 索引 2 并省略 stop 即可

输出

 
[3, 4, 5, 6, 7]

说明

上面的代码使用从索引 2 到末尾的切片来生成一个名为 part 的新列表。原始 nums 列表从索引 2 开始被截断,导致列表 part 包含 [3, 4, 5, 6, 7]。

示例

输出

 
[1, 2, 3, 4, 5, 6, 7]

说明

代码中使用 [::] 表示法来分割 nums 列表,该表示法表示整个列表的切片,以生成一个名为 part 的新列表。这表示 nums 的每个元素都被部分包含。

这会产生整个列表的切片。以这种方式省略 start 和 stop 没有实际应用,但有一个重要的应用。

例如,要每秒从列表中提取一个值,请在切片列表时省略开始和结束值,但指定步长

输出

 
[1, 3, 5, 7]

说明

代码显示初始化了一个名为 nums 的列表,其中包含从 1 到 7 的数字。接下来,使用 [::2] 表示法对 nums 列表进行切片,该表示法指定步长为 2 的切片以形成一个名为 part 的新列表。这表明每个后续的数字元素都被部分包含。因此,part 列表中包含原始 nums 列表中偶数索引处的条目 - [1, 3, 5, 7]。

您可以看到我们正在走向何方……

[::-1] 部分

负切片是 Python 中反转列表的一种技术

  • 如果您想对整个列表进行切片,可以完全省略 start 和 stop 值。
  • 您可以提供负步长值来反转切片。
  • 步长应为 -1,因为您希望将每个值都包含在反转的列表中。

代码看起来是这样的。

输出

 
[7, 6, 5, 4, 3, 2, 1]

说明

代码显示初始化了一个名为 nums 的列表,其中包含从 1 到 7 的数字。可以通过短语 nums[::-1] 以反向方式复制 nums 列表。当语法指示步长为 -1 的切片 [:: -1] 时,列表会以反向顺序扫描。part 列表中的 nums 列表项按反向顺序排列,从 7 开始到 1 结束。

这会产生原始列表的反向顺序。这正是 [::-1] 所做的!