Reputation: 2731
I always thought that omitting arguments in the python slice operation would result into:
0
len(lst)
1
That holds true if the step is positive, but as soon as the step is negative, like in the "reverse slice" [::-1]
, omitting start/end results in:
len(lst)-1
None
Is this a special case, or am I missing something?
Upvotes: 0
Views: 130
Reputation: 1121356
The default is always None
; it is up to the type to determine how to handle None
for any of the 3 values. The list
object is simply passed a slice(None, None, -1)
object in this case.
See footnote 5 to the operations table in the sequence types documentation for how Python's default sequence types (including list objects) interpret these:
s[i:j:k]
5. [...] If i or j are omitted orNone
, they become “end” values (which end depends on the sign of k).
So the defaults are dependent on the sign of the step value; if negative the ends are reversed. For [::-1]
the end values are len(s) - 1
and -1
(absolute, not relative to the end), respectively, because the step is negative.
Upvotes: 2