step
为负值如何理解?切片操作是Python中对序列对象(如字符串、列表等)进行切片的一种操作方式。它的基本语法是 [start:stop:step]
,其中 start
表示起始位置(默认为0),stop
表示结束位置(默认为序列的长度),step
表示步长(默认为1)。
在 Python 中,切片操作的 step
参数可以为负值,表示从右往左取值,即反向切片。
当 step
参数为正数时,切片从左往右取值,每次取值的步长为 step
;当 step
参数为负数时,切片从右往左取值,每次取值的步长为 step
的绝对值。
需要注意的是,当 step
参数为负数时,切片的起始索引位置应该在终止索引位置的右侧。否则,切片将返回空序列。例如,”123456789”[3:1:-1] 表示从 “123456789”[3] 开始向左取值,直到 “123456789”[1] 为止(不包括 “123456789”[1]),每次取值的步长为 1。这里的起始索引位置 3 大于终止索引位置 1,但由于 step
参数为负数,所以切片仍然有效。最终返回的序列为 “123456789”[3] 和 “123456789”[2],即 43
。
>>> "123456789"[3:1:-1]
'43'
对于一个字符串 s,使用 “123456789”[::-1] 可以将字符串反转,这里的 step
参数为 -1,表示从右往左取值,每次取值的步长为 1。这里的 start
和 stop
默认值和 step
为正数时相反,都不写,表示默认取整个字符串的范围。要覆盖整个字串时 stop
必须为空,因为在从左往右操作时,没有合适的值能表示第一个元素左边的索引。
>>> "123456789"[9:0:-1]
'98765432'
>>> "123456789"[9::-1]
'987654321'
>>> "123456789"[::-1]
'987654321'
整个切片操作的从字符串的最后一个字符开始,以步长 -1 取字符,一直取到字符串的第一个字符为止,从而实现了字符串的反转。
其他步长的例子略举如下:
>>> "123456789"[::-2]
'97531'
>>> "123456789"[::-3]
'963'
>>> "123456789"[::-4]
'951'
>>> "123456789"[::-5]
'94'
>>> "123456789"[::-6]
'93'
>>> "123456789"[::-7]
'92'
>>> "123456789"[::-8]
'91'
>>> "123456789"[::-9]
'9'
>>> "123456789"[::-10]
'9'
>>> "123456789"[::-11]
'9'