The extended slice syntax in python has been explained to me as "a[n:m:k] returns every kth element from n to m
".
This gives me a good idea what to expect when k is positive. But I'm lost on how to interpret a[n:m:k]
for negative k. I know that a[::-1]
reverses a, and that a[::-k]
takes ever kth element of the reversed a.
But how is this a generalization of the definition for k positive? I'd like to know how a[n:m:k]
is actually defined, so that (for example) I can understand why:
"abcd"[-1:0:-1] = "dcb"
Is a[n:m:-k]
reversing the sequence a, then taking the elements with original indices starting from n and ending one before m or something? I don't think so, because this pattern doesn't fit other values of n and m I've tried. But I'm at a loss to figure out how this is actually defined, and searching has gotten me nowhere.
[-1:0:-1]
means: start from the index len(string)-1
and move up to 0
(not included) and take a step of -1
(reverse).
So, the following indexes are fetched:
le-1, le-1-1, le-1-1-1 .... 1 # le is len(string)
example:
In [24]: strs = 'foobar' In [25]: le = len(strs) In [26]: strs[-1:0:-1] # the first -1 is equivalent to len(strs)-1 Out[26]: 'raboo' In [27]: strs[le-1:0:-1] Out[27]: 'raboo'
The Python documentation (here's the technical one; the explanation for range()
is a bit easier to understand) is more correct than the simplified "every kth element" explanation. The slicing parameters are aptly named
slice[start:stop:step]
so the slice starts at the location defined by start
, stops before the location stop
is reached, and moves from one position to the next by step
items.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With