在 Python 中对字符串进行切片和反转时如何知道输出结果的详细说明

Detailed explanation on how to know what the output will be when slicing and reversing a string in Python

a="qwerty"

我希望输出为“tre”。但是每当我尝试做

print(a[2:5:-1])
print(a[-4:-1:-1])
print(a[2:-1:-1])
print(a[-4:5:-1])

这一切都让我空白。但是当我尝试

print(a[-2:-5:-1])

它神奇地输出了我需要的东西。

所以问题来了:为什么它一直都不起作用,但当我像这样 [-2:-5:-1] 切片时却起作用了?尽管,正如我所想,我对同一根绳子进行了切片和反转。需要详细说明。

docs所列:

s[i:j:k]ijs 切片,步骤 k

结果列表为:[s[i], s[i+k], ..., s[j]

这是因为 stepping 在 python 中的工作方式。当您键入 my_list[start:end:step] 时,python 将解释如下:

start索引开始到end索引值(不包括end索引本身),每一步应该是step值。

例如考虑下面的例子:

my_str = 'abcdefghijk'

print(my_str[2:7:2])

此代码将为您提供 ceg 作为输出。为什么?因为它从索引号 2 移动到 7,不包括 7 索引本身。所以是'cdefg'。然后用 2 个步骤获取它们,意思是首先 c 然后将索引增加 2(索引=4)所以得到 e (跳过 d 值)。

但是您需要了解反向索引如何与我在下面解释的步进一起工作。

反向步进

如果 stepping 值为负会发生什么。它从 start 开始,以 -1 步长值移动到 end 数字,这意味着它一步一步地向后移动。

但请注意它向后移动以到达 end 索引。所以 start 值应该在列表中的 end 之后,因为它要从 start 索引向后移动到 end 索引。 ([..., end, ...<---..., start, ...])

你问的输出的原因

所以当你输入 print(a[-4:-1:-1]) python 从 -4 开始,每次向后移动一步到达索引 -1 但它永远不会发生,因为索引 -1 在索引号 -4 之后并且不是在那之前。所以 python 无法获取字符串所以它 returns -1。其他示例也是如此。

但是当你输入 print(a[-2:-5:-1]) python 从索引 -2 开始并逐步向后移动 (-2 -> -3 -> -4) 所以它到达索引 -5 并且它停止并且 returns 值。

如有任何问题,请提出。