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(由于负数)。

链接地址: http://www.djcxy.com/p/26765.html

上一篇: Python Slice operator: Negative start combined with Positive stop

下一篇: What are the default values for extended slice with negative and positive step