Q's: pythonD and range(1,12)

Steven D'Aprano steve at REMOVETHIScyber.com.au
Tue Mar 14 06:45:21 EST 2006


On Mon, 13 Mar 2006 17:24:31 -0800, Raymond Hettinger wrote:

> John Savage wrote:
>> Could
>> someone please explain the rationale behind python designers' thinking
>> in deciding the function "range(1,12)" should return the sequence 1 to
>> 11 rather than the more intuitively-useful 1 to 12??
> 
> There are several ways to do this, closed intervals, half-open
> intervals, zero indexed, indexed from one, etc.   Each way has its own
> strengths and weaknesses.  Guido chose the one he liked best and
> applied the concept consistently throughout the language (slicing,
> etc).  His choice has some nice properties such as len(range(n))==n and
> range(0,i)+range(i,n)==range(n).
> 
> The downside of the half-open interval approach is that it can be
> confusing when counting backwards:  range(n-1, -1, -1).  Accordingly,
> the builtin reversed() function was introduced so you could write this
> in a more intuitive and readable manner:  list(reversed(range(n))).
> 
> Some of this is a matter of taste and a matter of what you're used to
> using, so the answer to what is the "more intuitively-useful" varies
> depending on who is answering the question.

It is true that *some* of this is just a matter of taste, but more
importantly, *much* of this is a matter of objective superiority.

See, for example:

http://lists.canonical.org/pipermail/kragen-tol/2004-March/000757.html
http://www.jaggersoft.com/pubs/HowToWriteALoop.htm#Half-Open%20Interval

This thread discusses why a closed interval is better:

http://mail.python.org/pipermail/edu-sig/2004-April/003747.html

As near as I can tell from reading it, the sole reason a closed interval
is better is that in common English phrases "x to y" usually (but not
always) means the closed interval including both x and y. 

A very common error in programming is the so-called fencepost error.
Half-open intervals help avoid them, while closed intervals tend to
result in this bug.

http://en.wikipedia.org/wiki/Fencepost_error

In other words, while the choice of half-open intervals is partly a matter
of taste, Guido is no dummy. Most of the time, his taste is influenced by
practical matters, and this is one of those times. Half-open intervals
will naturally help you avoid bugs. 


-- 
Steven.




More information about the Python-list mailing list