通过切片理解字符串反转

40 投票
16 回答
110155 浏览
提问于 2025-04-15 11:10

我在找一种方法来把字符串反向打印出来,快速在谷歌上搜索了一下,发现了这个方法:

假设 a 是一个字符串变量。这个方法会把 a 字符串反向输出:

a[::-1]

有人能解释一下这个是怎么实现的吗?

16 个回答

6

我觉得下面这个方法对于反向打印字符串来说更有道理,不过也许只是我个人的看法:

for char in reversed( myString ):  
  print( char, end = "" )
8

这里的“-1”表示切片中的“步长”部分。在这个例子中,它是每次取一个字符,但方向是反向的(负数的步长意味着从字符串的末尾开始)。比如,如果你把步长设为2,那么你就会得到字符串中的每隔一个字符,从第一个字符开始。如果步长设为-2,那么你就会得到每隔一个字符,从最后一个字符开始,往回取。

简单来说,如果 a = '12345'

  • a[::2] 的结果是 135
  • a[::-1] 的结果是 54321
  • a[::-2] 的结果是 531
76

当然,[::] 是一个叫做 扩展切片 的操作符。它可以让你从一个序列中提取子串。简单来说,它的用法是通过指定你想要的元素范围,格式是 [开始:结束:步长],适用于所有的序列。

  • 你可以省略一个或多个部分,它会自动处理得很好。
  • 开始、结束和步长用负数时也有特别的含义。

对于开始和结束,如果你给的是负数,那就意味着从序列的末尾开始计数。例如,如果我有一个列表:

l = [1,2,3]

那么 l[-1] 是 3,l[-2] 是 2,l[-3] 是 1。

至于 步长 参数,负数表示要反向遍历序列。所以对于一个列表:

l = [1,2,3,4,5,6,7,8,9,10]

你可以写 l[::-1],这基本上意味着在读取列表时步长为 -1。Python 会自动处理开始和结束的部分,所以它会反向遍历列表,给你 [10,9,8,7,6,5,4,3,2,1]

我给出的例子是列表,但字符串也是一种序列,工作原理是一样的。所以 a[::-1] 的意思是通过反向遍历字符串来构建一个新的字符串,连接得到的字符。

撰写回答