On Dec 14, 10:03 am, Dave <b49p23t...@stny.rr.com> wrote:
> Just as sets may now be written as {3,'hi'}, I propose that slices
> should be available using [start:end] syntax.  Following example comes
> from projecteuler.net problem 166.  The Numeric community would also
> like this, as would the general python user.  The slice notation would
> require one ":" between the brackets to differentiate it from a list,
> which is similar to the set notation requirement that disambiguates it
> from a dictionary.
>
> Several times now I've wanted python slice notation.  Perhaps I'll
> write a Python Enhancement Proposal.  I stored slices of vector array
> entries to add
>
> edge = 4
> indexes = []
> n = edge
> nn = n**2
> for i in range(edge):
>     indexes.extend([
>         slice(i*n,(i+1)*n,1),       # rows
>         slice(i,nn,n),              # cols
>         ])
>
> row_slices = indexes[0::2]
> col_slices = indexes[1::2]
> slash = slice(n-1,n*(n-1)+1,n-1)
> backslash = slice(0,nn,n+1)
>
> Which could have been written in a manner completely consistent with
> other python shorthand notations and for which python "cannot
> possibly" use the notation for some other purpose,
>
> edge = 4
> indexes = []
> n = edge
> nn = n**2
> for i in range(edge):
>     indexes.extend([
>         [i*n: (i+1)*n]                  # rows
>         [i: nn: n],                      # cols
>         ])
>
> row_slices = indexes[0::2]
> col_slices = indexes[1::2]
> slash = [n-1: n*(n-1)+1: n-1]
> backslash = [0: nn: n+1]

-1

Explicit creation of slice objects is an uncommon need and there is no
reason to support it with its own syntax.

I'd agree with Terry Reedy that range/xrange is far more commonly used
than slice objects, and if a floating slice syntax were ever added to
Python it ought to be used for range.


If you need to use a lot of slice objects you can lower your code
footprint by defining a helper class like this (adapt as needed):

class SliceCreator(object):
    def __getitem__(self,loc):
        if not isinstance(loc,slice):
            raise TypeError
        return loc
slc = SliceCreator()

slash = slc[n-1: n*(n-1)+1: n-1]


It might have been a reasonable idea for slice (and, perhaps, range)
to use slice notation rather than a function call, on the thinking
that the notational convenience outweighs the fact that you're not
actually getting an item, but it's too late for that.


Carl Banks
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to