What does the syntax [::-1] really mean?

Duncan Booth duncan.booth at invalid.invalid
Thu Oct 4 16:18:37 EDT 2007


Casey <Caseyweb at gmail.com> wrote:

> From this, I would expect that x[::-1] would be identical to x[n:0:-1]
> (n and 0 being the "end" values, with the order switched due to the
> negative step value).  But the clause that "(but never including j)"
> means that x[n:0:-1] excludes the 1st element of x, x[0].  A quick
> test in ipython confirms that "abc"[3:0:-1] => "cb", not "cba".
> Changing the "end" value  to x[n:-1:-1] results in an empty string.
> 
> So my question is: "what exactly is [::-1] shorthand for"?  Or is it a
> special case, in which case why isn't it  defined as such in the
> library?

You made a mistake thinking that the first omitted value maps to 'n': in 
fact it maps to -1.

the invariant that you are looking for is that for all non-negative a, b:
   x[a:b:1] reversed is x[-len(x)+b-1:-len(x)+a-1:-1]

x[::1] is equivalent to x[0:len(x):1]

therefore x[::-1] is the same as:
    x[-len(x)+len(x)-1:-len(x)+0-1:-1]
 which is just:
    x[-1:-len(x)-1:-1]



More information about the Python-list mailing list