number ranges (was Re: Matlab page on scipy wiki)
Colin J. Williams
cjw at sympatico.ca
Sun Feb 19 15:53:35 EST 2006
Colin J. Williams wrote:
> Bryan Cole wrote:
>
>>>
>>> First, I think the range() function in python is ugly to begin with.
>>> Why can't python just support range notation directly like 'for a in
>>> 0:10'. Or with 0..10 or 0...10 syntax. That seems to make a lot more
>>> sense to me than having to call a named function. Anyway, that's a
>>> python pet peeve, and python's probably not going to change something
>>> so fundamental...
>>
>>
>> There was a python PEP on this. It got rejected as having too many
>> 'issues'. Pity, in my view.
>>
>> see http://www.python.org/peps/pep-0204.html
>>
>> BC
>>
>>
> This decision appears to have been made nearly six years ago. It would
> be a good idea to revisit the decision, particularly since the reasons
> for rejection are not clearly spelled out.
>
> The conditional expression (PEP 308) was rejected but is currently being
> implemented in Python version 2.5. It will have the syntax A if C else B.
>
> I have felt, as Gary Ruben says above, that the range structure is ugly.
>
> Two alternatives have been suggested:
> a) a:b:c
> b) a..b..c
>
> Do either of these create parsing problems?
> for i in a:b:
> Should this be treated as an error, with a missing c (the increment)
> print i
>
> for i in 2..5:
> print i We
> don't know whether the 2 is an integer until the second period is scanned.
>
> It would be good if the range and slice could be merged in some way,
> although the extended slice is rather complicated - I don't understand it.
>
> 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 section 4.2 The standard type
> hierarchy <http://www.network-theory.co.uk/docs/pylang/ref_30.html>)
> 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.
>
> [source: http://www.network-theory.co.uk/docs/pylang/ref_60.html]
>
> The seems to be a bit of a problem with slicing that needs sorting out.
>
> The syntax for a slice list appears to allow multiple slices in a list:
>
> extended_slicing ::= primary <primaries.html#tok-primary> "["
> slice_list <slicings.html#tok-slice_list> "]"
> slice_list ::= slice_item <slicings.html#tok-slice_item> (","
> slice_item <slicings.html#tok-slice_item>)* [","]
>
> but the current interpreter reports an error:
>
> >>> a= range(20)
> >>> a[slice(3, 9, 2)]
> [3, 5, 7]
> >>> a[slice(3, 9, 2), slice(5, 10)]
> Traceback (most recent call last):
> File "<interactive input>", line 1, in ?
> TypeError: list indices must be integers
> >>>
>
> I have taken the liberty of cross posting this to c.l.p.
>
> Colin W.
This was originally posted to the numpy discussion list.
Colin W.
More information about the Python-list
mailing list