首页 文章

Python Slice运算符:负启动与Positive stop结合使用

提问于
浏览
3

我开始使用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 回答

  • 2

    Python列表线性增长并且不是循环的,因为这样的切片不会像预期的那样换行(从结束回到开始向前) .

    由于负指数读作 -ind + len(lst)-1 这里代表 4 . 你不可能以积极的步伐从4到1 . 但是,通过消极的步幅,您可以:

    In [11]: a[-1:1:-1]
    Out[11]: [5, 4, 3]
    
  • 0

    虽然允许使用负数索引,但Python的步幅并不是循环的,这意味着你不能将最后一个索引作为"beyond" . 也就是说,"every element from the last and onward until the first element"是荒谬的 . 您可能会认为它应该导致错误,而是返回空列表 [] .

    解决方法是使用负步幅,如下所示:

    a[5::-4]  # results in [5, 1]
    

    这里我们从第5个元素开始,一次继续遍历所有元素(两个 :: 之间没有数字)和跳跃-4(由于减号向后)元素 .

相关问题