Extended slices and indices

Robert Kern robert.kern at gmail.com
Sat Sep 23 22:10:42 EDT 2006


GavinCrooks at gmail.com wrote:
> Robert Kern wrote:
>> I'd say bug in the .indices() method. The meaning of [4:-1:-1] is unavoidable
>> different than [::-1] since the index -1 points to the last element, not the
>> imaginary element before the first element. Unfortunately, there *is* no
>> concrete (start, stop, step) tuple that will emulate [::-1].
> 
> After some more experimenting, it seems that [L-1:-L-1:-1] will reverse
> a sequence of length L.

Ah, yes. Good point.

> But slice(L-1,-L-1,-1).indices(L) gives (L-1,
> -1,-1) which will not reverse the sequence. And range(L-1, -L-1, -1) is
> totally off, but range(L-1,-1,-1) is correct.
> 
> Seems like a bug (or an odd feature) of extended slicing of strings and
> other built in sequences.

It's not a bug with extended slicing. -1 has a very definite meaning when used 
as an index. The result of applying [4:-1:-1] is completely consistent with that 
meaning. The problem is with .indices() for giving you something that is 
inconsistent with that meaning. range() is neither here nor there; it's 
semantics are simply different.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list