Tuple slices

Terry Reedy tjreedy at udel.edu
Mon Jan 24 20:57:27 EST 2005

"George Sakkis" <gsakkis at rutgers.edu> wrote in message 
news:35lbvdF4k3ss4U1 at individual.net...
> Actually my initial motivation was not a huge tuple I had to slice many 
> times. It was something much
> less extraordinarily unlikely, a recursive function with a sequence 
> parameter:
> def foo(sequence):
>    # base_case
>    # do_stuff()
>    combine(foo(sequence[:n]),
>                  foo(sequence[n:]))
> Having each slice be a view of the original sequence instead of a fresh 
> copy would be a Good Thing

Why?  To save time? memory?  Either would require more that a few bytes per 
slice.   If they are, you can probably use virtual slices as follows.

def foo(sequence):
  def _foo(seq, start, stop)
     # base_case
     # do_stuff()
     combine(_foo(seq, start, n), _foo(seq, n, stop))
  _foo(sequence, 0, len(sequence)

In other words, if you don't really want slices copied out of the sequence, 
then don't slice!  Just use 2 ints to indicate the working region or view. 
Both this and using a nested function with additional params are standard 
techniques.  This also works when the seq is mutable and you want changes 
to the 'slice' to change the original, as in quicksort.

Terry J. Reedy

More information about the Python-list mailing list