python for loop

Gary Herron gherron at islandtraining.com
Tue Mar 31 21:05:19 EDT 2009


Lada Kugis wrote:
> I'm coming from fortran and c background so I'm certainly biased by
> them. But if you could explain one thing to me:
>
> in fortran for example:
> for i=1,n
> goes from 1,2,3,4,...,n
>
> in python for example:
> for i in range(1,n)
> goes from 1,2,3,4,...,n-1
> (that is, it goes from 1 up to, but not including n)
>
> Why is that so ? What were the reasons for that "not including" part ?
> It troubles me greatly, and I cannot see it's advantages over the
> "standard" "up to and including" n.
>
> Best regards
> Lada
> --
> http://mail.python.org/mailman/listinfo/python-list
>   
This debate has been around for decades, in both mathematics and 
programming.

Should a loop through n things use indices 
    1, 2, ..., n
or
    0, 1, ..., n-1 ?

Fortran tends to go with the former (1-based indices) , while modern 
languages usually go with the latter (0-based indices).   (And just for 
the record, your range(1,n) seems to be trying to coerce Python from 
0-based to 1-based.)

The arguments for each are many, but are often centered around the 
prevalence of  the proverbial off-by-one error.    Here's a nice 
explanation of the off-by-one error:
    http://en.wikipedia.org/wiki/Off-by-one_error
Google can provide many more.


My personal view is that 0-based loops/indices is *far* more natural, 
and the 1-based loops/indices are a *huge* source of off-by-one errors.  
But I'm sure others will argue over that point.

Gary Herron





More information about the Python-list mailing list