Python Slice operator: Negative start combined with Positive stop
我开始使用python,并开始关注带有负值的切片操作符。让我用下面的代码示例说明我的问题:
1 2 3 | 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(负启动和正停止)没有返回像
如果有人能向我解释,我会很高兴的。谢谢!
python列表呈线性增长,并且不是循环的,因为这样的切片不会像您期望的那样进行换行(从结束到开始)。
由于负指数读作
1 2 | In [11]: a[-1:1:-1] Out[11]: [5, 4, 3] |
虽然允许使用负索引,但python的步幅不是循环的,这意味着您不能"超越"最后一个索引。也就是说,"从最后一个元素到第一个元素"都是无稽之谈。您可能会认为这会导致错误,但返回的却是空列表
解决方法是使用消极的步幅,如:
1 | a[5::-4] # results in [5, 1] |
在这里,我们从第5个元素开始,继续执行所有元素(两个