繁体   English   中英

为什么 python 中的切片会停在 -1 处?

[英]Why does slicing in python stop at -1?

"abcde"[0:5:1]给出 abcde。 所以我希望"abcde"[4:-1:-1]返回 edcba 但它什么也没给出。 有没有办法在显式给出中间参数的同时获得与"abcde"[4::-1]相同的结果?

0 | 1 | 2 | 3 | 4个

一个 | 乙 | c | d | 电子

=============

[4:-1:-1]

 4  -> e

-1 -> e

-1 -> step back

=============

=> 索引 4 之间没有任何内容 -> -1 退后一步

Python 切片中的-1表示:第 4rth(最后一个)。 4:-1表示4:4 -> 空字符串。

"abcde"[4::-1] # this gives "edcba"
"abcde"[4:-(len("abcde")+1):-1] # this too

您正在从最后一个索引 (4) 切片到索引 4,这导致一个空字符串。 换句话说,Python 正在执行以下操作:

"abcde"[4:4:-1]
# which is equal to
"abcde"[4:4]
# and evaluates to
""

如果以 -1 的步幅从最后一个索引 (4) 切片到第一个索引 (0),则可以反转它。 因此,以下代码将起作用:

"abcde"[-1:0:-1]

在实际实践中可以缩写为:

"abcde"[::-1]

如果您需要使用一个数字作为停止点position,例如,您正在使用一个变量来表示停止点索引,那么您可以使用等于-len(obj) - 1的负值,其中obj是您想要的 object在第一个字符之前反转为 position:

>>> 'abcde'[4:-6:-1]
'edcba'

要么,

>>> 'abcde'[-1:-6:-1]
'edcba'

Python 列表语法为:

列表[开始:停止:步骤]

在第一个示例中:start=0,stop=5,step=1。 这相当于 C 样式的 for 循环:

对于(i=0;i<5;i++)

在你的第二个例子中,start=4,stop=-1=4,step=-1。 这相当于 C 样式的 for 循环:

对于 (i=4; i>4; i--)

由于开始条件和停止条件相同,因此您的结果为空。

由于 -1 是一个负数,作为开始/停止是 python 列表切片中的一个特例,意思是“len(list)-1”,你实际上不能做你想要的操作:

对于 (i=4; i>-1; i--)

所以你最好的选择是 "abcde"[::-1] ,它会从方向正确地推断出结束和开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM