理解 pythons 反向切片 ( [::-1] )
Understanding pythons reverse slice ( [::-1] )
我一直认为在 python 切片操作中省略参数会导致:
- 开始 =
0
- 结束=
len(lst)
- 步数=
1
如果步长为正,则成立,但一旦步长为负,如 "reverse slice" [::-1]
,省略 start/end 会导致:
- 开始 =
len(lst)-1
- 结束=
None
这是特例,还是我遗漏了什么?
默认是总是None
;由类型决定如何处理 3 个值中的任何一个 None
。在这种情况下,list
对象只是传递了一个 slice(None, None, -1)
对象。
请参阅 sequence types documentation 中操作 table 的脚注 5,了解 Python 的默认序列类型(包括列表对象)如何解释这些:
s[i:j:k]
5. [...] If i or j are omitted or None
, they become “end” values (which end depends on the sign of k).
因此默认值取决于步长值的符号;如果为负,则两端相反。对于 [::-1]
,结束值分别为 len(s) - 1
和 -1
(绝对值,而不是相对于结束值),因为步长为负。
我一直认为在 python 切片操作中省略参数会导致:
- 开始 =
0
- 结束=
len(lst)
- 步数=
1
如果步长为正,则成立,但一旦步长为负,如 "reverse slice" [::-1]
,省略 start/end 会导致:
- 开始 =
len(lst)-1
- 结束=
None
这是特例,还是我遗漏了什么?
默认是总是None
;由类型决定如何处理 3 个值中的任何一个 None
。在这种情况下,list
对象只是传递了一个 slice(None, None, -1)
对象。
请参阅 sequence types documentation 中操作 table 的脚注 5,了解 Python 的默认序列类型(包括列表对象)如何解释这些:
s[i:j:k]
5. [...] If i or j are omitted orNone
, they become “end” values (which end depends on the sign of k).
因此默认值取决于步长值的符号;如果为负,则两端相反。对于 [::-1]
,结束值分别为 len(s) - 1
和 -1
(绝对值,而不是相对于结束值),因为步长为负。