On Sunday, October 28, 2012 9:44:56 PM UTC-7, alex23 wrote: > On Oct 29, 2:09 pm, Andrew <andrewr3m...@gmail.com> wrote: > > > 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. > > > > Slices are passed in if provided to __getitem__/__setitem__/ > > __delitem__, so you'd need to override it at the list level: > > > > class RangedSlicer(list): > > def __getitem__(self, item): > > # map item.start, .stop and .step to your own semantics > > > > Then wrap your lists with your RangedSlicer class as needed.
Hmmm... I began a test in an interactive shell: >>> class RangedSlicer(list): ... def __getitem__(self,item): ... print item ... >>> a=[1,2,3,4,5] >>> a.__getitem__( slice(1,5) ) [2, 3, 4, 5] Very odd... I would have expected [1,2,3,4] >>> a.__getitem__( slice(1,8) ) [2, 3, 4, 5] So, slice() somehow was truncated although it ought to have been executed first, and passed to __getitem__() before __getitem__ could affect it. That requires some tricky programming! Not only that, but, a.__getitem__( xrange[1,8] ) Causes an exception before the __getitem__ shadowing received it. I don't see how I can over-ride it with your suggestion, but that's very inconsistent.... for your idea seems to be normal python that would work for user defined classes. -- http://mail.python.org/mailman/listinfo/python-list