理解pythons反向切片([:: - 1])

时间:2016-03-26 17:41:24

标签: python slice

我一直认为在python切片操作中省略参数会导致:

  • start = 0
  • end = len(lst)
  • step = 1

如果步骤是肯定的,那么这是正确的,但是一旦步骤为负,就像在"反向切片" [::-1],省略开始/结束结果:

  • start = len(lst)-1
  • end = None

这是一个特例,还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

默认为始终 None;由类型决定如何处理3个值中的任何一个的None。在这种情况下,list对象只是传递slice(None, None, -1)对象。

请参阅sequence types documentation中操作表的脚注5,了解Python的默认序列类型(包括列表对象)如何解释这些:

  

s[i:j:k]
  5. [...] 如果省略 i j None,它们将成为“结束”值(结束)取决于 k 的符号。

因此默认值取决于步长值的符号;如果是负面的,则结束相反。对于[::-1],结束值分别为len(s) - 1-1(绝对值,而不是相对于结尾值),因为该步骤为负数。