[Tutor] a code question, but don't know question's name
kent37 at tds.net
Sun Oct 7 19:01:45 CEST 2007
Alan Gauld wrote:
> "Kent Johnson" <kent37 at tds.net> wrote
>>> The notation data[;,0] doesn't make sense and is an error in
>> [:,0] is an extended slice, not an error:
> Really? I got an error from the interpreter.
> Traceback (most recent call last):
> File "<input>", line 1, in ?
> TypeError: list indices must be integers
Ok. What I meant is, it is not a *syntax* error.
> Following the link I get the somewhat obscure explanation:
> The semantics for an extended slicing are as follows.
> The primary must evaluate to a mapping object,
> This bit I understand :-)
> 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;
> This seems to be the case here, but where is the tuple?
The tuple is the parameter passed to __getitem__():
In : class sliced(object):
...: def __getitem__(self, item):
...: print repr(item)
In : s=sliced()
In : s
In : s[1:2:3]
slice(1, 2, 3)
In : s[:,0]
(slice(None, None, None), 0)
> If i try testing anything I just get an error.
There's the rub. Extended slicing is not supported by any built-in
containers. That's why you get a TypeError when you try it with a list.
> When were these introduced? I am on v2.4.3
At least since 2.0 :-)
> 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 3.2) 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.
> And most of that I don't understand.
It is saying what the values passed to __getitem__() are: either a plain
object (probably an integer); an Ellipsis object, if the parameter is ...:
In : s[...]
or a slice object, or a tuple of such things.
> Can someone who does give some examples of this
> and what you would use it for?
>> It is used in Numeric/numpy to select from multidimensional arrays.
See the numpy docs for examples.
> I don't use either, but since its part of the languyage I assiume it
> can be used in normal Python lists too?
No. It can be used for user-defined classes but it is not supported by
any built-ins. IIUC this feature was added specifically for Numeric.
More information about the Tutor