通过切片理解字符串反转
我在找一种方法来把字符串反向打印出来,快速在谷歌上搜索了一下,发现了这个方法:
假设 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]
的意思是通过反向遍历字符串来构建一个新的字符串,连接得到的字符。