Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python中的切片停止在-1?_Python_Slice - Fatal编程技术网

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

为什么python中的切片停止在-1?,python,slice,Python,Slice,“abcde”[0:5:1]给出abcde。所以我希望“abcde”[4:-1:-1]返回edcba,但它没有给出任何结果。 当显式地给出中间参数时,是否无法获得与“abcde”[4::-1]相同的结果?您正在从最后一个索引(4)到索引4进行切片,结果是一个空字符串。换句话说,Python正在执行以下操作: "abcde"[4:4:-1] # which is equal to "abcde"[4:4] # and evaluates to "&

“abcde”[0:5:1]
给出abcde。所以我希望
“abcde”[4:-1:-1]
返回edcba,但它没有给出任何结果。
当显式地给出中间参数时,是否无法获得与“abcde”[4::-1]相同的结果?

您正在从最后一个索引(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]
0 | 1 | 2 | 3 | 4

a | b | c | d | e

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

[4:-1:-1]

 4  -> e

-1 -> e

-1 -> step back
=============


=>在Python切片中,索引4->-1之间没有带后退的内容,这意味着:4rth(last-before-last)。
4:-1
表示然后
4:4
->空字符串

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

如果需要为停止位置使用数字,例如,使用变量表示停止索引,则可以使用等于
-len(obj)-1
的负值,其中
obj
是要反转的对象,作为第一个字符之前的位置:

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

Python列表语法为:

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

在第一个示例中:开始=0,停止=5,步骤=1。这相当于循环的C样式:

对于(i=0;i4;i--)

由于启动和停止条件相同,因此结果为空

由于-1是一个负数,作为开始/停止是python列表切片中的一个特例,表示“len(list)-1”,因此实际上无法执行所需的操作:

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


因此,您最好的选择是“abcde”[::-1],它将正确地从方向推断结束和开始。

切片的中间部分是这样的:
len(obj)-1
。在你的例子中,
abcde[4:4:-1]
。也许你想要这样的东西:
“abcde”[4:None:-1]
具体地说,
“abcde”[0:-1:-1
]应该是
“abcde”[-1:0:-1]
,这仍然不起作用(因为它通过停止索引1而省略了“a”)<代码>“abcde”[-1::-1]工作正常,因为空的开始或结束表示“在步幅符号上下文中有意义的开始或结束”
>>> 'abcde'[-1:-6:-1]
'edcba'