Alan Gauld wrote:
> "Kent Johnson" <[EMAIL PROTECTED]> wrote
>
>>> The notation data[;,0] doesn't make sense and is an error in
>>> Python.
>> [:,0] is an extended slice, not an error:
>> http://docs.python.org/ref/slicings.html
>>
>
> Really? I got an error from the interpreter.
>
>>>> d[:,0]
> 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 [1]: class sliced(object):
...: def __getitem__(self, item):
...: print repr(item)
...:
...:
In [2]: s=sliced()
In [3]: s[3]
3
In [4]: s[1:2:3]
slice(1, 2, 3)
In [5]: 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 :-)
http://www.python.org/doc/2.0/ref/slicings.html
>
> """
> 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 [6]: s[...]
Ellipsis
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.
Kent
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor