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

Reply via email to