Python Slice运算符:Negative start与Positive stop结合使用
我开始与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]
? 因为我选择了列表的最后一个元素,并且选择了第二个元素,所以这样做会很有意义。
如果有人能向我解释,我会很高兴。 谢谢!
Python列表线性增长,并且不是循环的,因为这样的切片不会像你期望的那样包裹(从尾回到开始前进)。
由于负指数被读作-ind + len(lst)
,因此-1
表示4
。 积极的步伐你不可能从4比1。 然而,如果有一个负面的步伐,你可以:
In [11]: a[-1:1:-1]
Out[11]: [5, 4, 3]
虽然负指数是允许的,但Python的步幅不是循环的,这意味着你不能超越最后一个指数。 也就是说,“从上到下的每个元素直到第一个元素”都是无意义的。 你可能会认为它应该导致错误,但是返回空列表[]
。
解决方法是使用负面步幅,如下所示:
a[5::-4] # results in [5, 1]
这里我们从第5个元素开始,继续遍历所有元素(两个::
之间没有数字),并且一次跳转-4(由于负数)。
上一篇: Python Slice operator: Negative start combined with Positive stop
下一篇: What are the default values for extended slice with negative and positive step