question about slicing with a step length

Steven D'Aprano steve at REMOVEMEcyber.com.au
Wed Mar 8 20:27:43 EST 2006


John Salerno wrote:

> Given:
> 
> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> 
> can someone explain to me why
> 
> numbers[10:0:-2] results in [10, 8, 6, 4, 2]?

I think the documentation is misleading/incomplete when 
it comes to negative strides for extended slices.

The relevent sections are here:

http://www.python.org/doc/2.3.5/ref/types.html

[quote]
Some sequences also support "extended slicing" with a 
third "step" parameter: a[i:j:k] selects all items of a 
with index x where x = i + n*k, n >= 0 and i <= x < j.
[end quote]

and from http://www.python.org/doc/2.3.5/ref/slicings.html

[quote]
It is not an error if i or j lie outside the range of 
valid indexes (such items don't exist so they aren't 
selected).
[end quote]


The documentation suggests that, given a slice 
[10:0:-2], Python looks up indices:

10 + 0*-2, 10 + 1*-2, 10 + 2*-2, ...

or 10, 8, 6, 4, 2, 0, ...

but since *none* of these indices is within the limits 
  10 <= x and x < 0, the documentation suggests that 
the result should be the empty list.

The indices actually selected are:

9, 7, 5, 3, 1

at which point I give up and throw my hands in the air 
and promise never to use negative strides with extended 
slices.


-- 
Steven.




More information about the Python-list mailing list