On Sunday, October 28, 2012 8:43:30 PM UTC-7, Ian wrote:
> On Sun, Oct 28, 2012 at 9:12 PM, <Andrew> wrote:
>
> > The slice operator does not give any way (I can find!) to take slices from
> > negative to positive indexes, although the range is not empty, nor the
> > expected indexes out of range that I am supplying.
>
> >
>
> > Many programs that I write would require introducing variables and logical
> > statements to correct the problem which is very lengthy and error prone
> > unless there is a simple work around.
>
> >
>
> > I *hate* replicating code every time I need to do this!
>
> >
>
> > I also don't understand why slice() is not equivalent to an iterator, but
> > can replace an integer in __getitem__() whereas xrange() can't.
>
> >
>
> >
>
> > Here's an example for Linux shell, otherwise remove /bin/env...
>
> > {{{#!/bin/env python
>
> > a=[1,2,3,4,5,6,7,8,9,10]
>
> > print a[-4:3] # I am interested in getting [7,8,9,10,1,2] but I get [].
>
> > }}}
>
>
>
>
>
> For a sequence of length 10, "a[-4:3]" is equivalent to "a[6:3]",
>
> which is an empty slice since index 6 is after index 3.
>
>
>
> If you want it to wrap around, then take two slices and concatenate
>
> them with "a[-4:] + a[:3]".
Hi Ian,
Well, no it really isn't equivalent; although Python implements it as
equivalent.
Consider a programmer who writes:
xrange(-4,3)
They clearly *want* [-4,-3,-2,-1,0,1,2]
That is the "idea" of a range; So, for what reason would anyone want -4 to +3
to be 6:3??? Can you show me some code where this is desirable??
I do agree that the data held in -4 is equivalent to the data in 6, but the
index is not the same.
So: Why does python choose to convert them to positive indexes, and have slice
operate differently than xrange -- for the slice() object can't possibly know
the size of the array when it is passed in to __getitem__; They are totally
separate classes.
I realize I can concat. two slice ranges, BUT, the ranges do not always span
from negative to positive.
eg: a line in my program reads:
a[x-5:x]
if x is 7, then this is a positive index to a positive index.
So, there is no logic to using two slices concatd !
I use this arbitrary range code *often* so I need a general purpose solution.
I looked up slice() but the help is of no use, I don't even know how I might
overload it to embed some logic to concatenate ranges of data; nor even if it
is possible.
--
http://mail.python.org/mailman/listinfo/python-list