Is there an easier way to express this list slicing?

Paul McGuire ptmcg at austin.rr._bogus_.com
Thu Nov 30 17:33:14 EST 2006


"John Henry" <john106henry at hotmail.com> wrote in message 
news:1164917296.255080.149660 at j72g2000cwa.googlegroups.com...
>
> John Henry wrote:
>
>>
>> Further, if splitUp is a sub-class of string, then I can do:
>>
>> alist, blist, clist, dlist = "ABCDEFGHIJ".slice((1,1,3,None))
>>
>> Now, can I override the slice operator?
>
> Maybe like:
>
> alist, blist, clist, dlist = newStr("ABCDEFGHIJ")[1,1,3,None]
>

No need to contort string, just expand on your earlier idea.  I changed your 
class name to SplitUp to more more conventional (class names are usually 
capitalized), and changed slice to __call__.  Then I changed the lens arg to 
*lens - note the difference in the calling format.  Pretty close to what you 
have above.  Also, reconsider whether you want the __init__ function 
list-ifying the input src - let the caller decide what to send in.

-- Paul

class SplitUp(object):
   def __init__(self,src):
       self._src=list(src)
   def __call__(self, *lens):
     ret = []
     cur = 0
     for length in lens:
         if length is not None:
             ret.append( self._src[cur:cur+length] )
             cur += length
         else:
             ret.append( self._src[cur:] )
     return ret

alist, blist, clist, dlist = SplitUp("ABCDEFGHIJ")(1,1,3,None)
print alist, blist, clist, dlist

Prints:
['A'] ['B'] ['C', 'D', 'E'] ['F', 'G', 'H', 'I', 'J']





More information about the Python-list mailing list