我开始使用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]
之类的内容?因为我选择列表的最后一个元素以及第二个元素的所有内容,所以这样才有意义。
如果有人能向我解释,我会很高兴。 谢谢!
答案 0 :(得分:2)
Python列表线性增长并且不是循环的,因为切片不会像预期的那样换行(从结束回到开始向前)。
由于负面指数被视为-ind + len(lst)
,-1
此处代表4
。你不可能以积极的步伐从4到1。但是,如果采取消极的步伐,您可以:
In [11]: a[-1:1:-1]
Out[11]: [5, 4, 3]
答案 1 :(得分:0)
虽然允许使用负数索引,但Python的步幅不是 cyclic ,这意味着你不能超越最后一个索引。也就是说,“从最后一个元素开始直到第一个元素”的每个元素都是荒谬的。您可能会认为它应该导致错误,而是返回空列表[]
。
解决方法是使用负步幅,如下所示:
a[5::-4] # results in [5, 1]
这里我们从第5个元素开始,继续遍历所有元素(两个::
之间没有数字)和一次跳跃-4(向后由于减号)元素。