我开始使用Python并开始关注具有负值的切片运算符 . 让我用以下代码示例显示我的问题:
a = [1,2,3,4,5]
a[-1] # a) returns [5], which is obvious
a[-1:1] # b) returns an empty list [], but why?
所以我从StackOverflow上的其他问题中已经知道的是,切片如何与负起始索引和省略的停止索引一起使用 .
但我的问题是:为什么案例b)(负启动和积极停止)不会返回像 [5, 1]
这样的东西?因为我选择了列表的最后一个元素以及第二个元素的所有内容,所以这样才有意义 .
如果有人能向我解释,我会很高兴 . 谢谢!
2 回答
Python列表线性增长并且不是循环的,因为这样的切片不会像预期的那样换行(从结束回到开始向前) .
由于负指数读作
-ind + len(lst)
,-1
这里代表4
. 你不可能以积极的步伐从4到1 . 但是,通过消极的步幅,您可以:虽然允许使用负数索引,但Python的步幅并不是循环的,这意味着你不能将最后一个索引作为"beyond" . 也就是说,"every element from the last and onward until the first element"是荒谬的 . 您可能会认为它应该导致错误,而是返回空列表
[]
.解决方法是使用负步幅,如下所示:
这里我们从第5个元素开始,一次继续遍历所有元素(两个
::
之间没有数字)和跳跃-4(由于减号向后)元素 .