On Wed, Jan 26, 2011 at 12:20 PM, Gerald Britton <gerald.brit...@gmail.com> wrote: > I'm looking at extended slicing and wondering when and how to use slice lists: > > slicing ::= simple_slicing | extended_slicing > simple_slicing ::= primary "[" short_slice "]" > extended_slicing ::= primary "[" slice_list "]" > slice_list ::= slice_item ("," slice_item)* [","] > slice_item ::= expression | proper_slice | ellipsis > proper_slice ::= short_slice | long_slice > short_slice ::= [lower_bound] ":" [upper_bound] > long_slice ::= short_slice ":" [stride] > lower_bound ::= expression > upper_bound ::= expression > stride ::= expression > ellipsis > > The semantics for an extended slicing are as follows. The primary must > evaluate to a mapping object, and it is indexed with a key that is > constructed from the slice list, as follows. If the slice list > contains at least one comma, the key is a tuple containing the > conversion of the slice items; otherwise, the conversion of the lone > slice item is the key. The conversion of a slice item that is an > expression is that expression. The conversion of an ellipsis slice > item is the built-in Ellipsis object. The conversion of a proper slice > is a slice object (see section The standard type hierarchy) whose > start, stop and step attributes are the values of the expressions > given as lower bound, upper bound and stride, respectively, > substituting None for missing expressions. > > I'd thought that I could do this: > >>>> l = [1,2,3,4,5] >>>> l[0:1, 3:4] > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: list indices must be integers, not tuple > > but that clearly doesn't work! So, when and how can one use slice lists? > > -- > Gerald Britton
If you're trying to learn a language, I would suggest reading tutorials, not the grammar. As you can see from the error thrown, the operation is syntactically valid (you don't get a syntax error). It's just that lists don't accept them. I don't know of any built-in data type that takes slice lists but numpy matrices will. >>> a = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]]) matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a[0:2,1:3] matrix([[2, 3], [5, 6]]) > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list