在 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]
从 i
到 j
的 s
切片,步骤 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 值。
如有任何问题,请提出。
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]
从 i
到 j
的 s
切片,步骤 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 值。
如有任何问题,请提出。