Why Python does *SLICING* the way it does??

Robert Kern rkern at ucsd.edu
Thu Apr 21 17:45:27 EDT 2005


Paul Rubin wrote:
> "Dan Bishop" <danb_83 at yahoo.com> writes:
> 
>>Name a problem space that inherently requires arrays to be 1-based
>>rather than 0-based.
> 
> 
> "inherently" is too strong a word, since after all, we could do all
> our computing with Turing machines.
> 
> Some algorithms are specified in terms of 1-based arrays.  And most
> Fortran programs are written in terms of 1-based arrays.  So if you
> want to implement a 1-based specification in Python, or write Python
> code that interoperates with Fortran code, you either need 1-based
> arrays in Python or else you need messy conversions all over your
> Python code.

I write Python code that interoperates with Fortran code all the time 
(and write Fortran code that interoperates with Python code, too). Very, 
very rarely do I have to explicitly do any conversions. They only show 
up when a Fortran subroutine requires an index in its argument list.

In Fortran, I do Fortran. In Python, I do Python.

Yes, there is some effort required when translating some code or 
pseudo-code that uses 1-based indexing. Having done this a number of 
times, I haven't found it to be much of a burden.

> The book "Numerical Recipes in C" contains a lot of numerical
> subroutines written in C, loosely based on Fortran counterparts from
> the original Numerical Recipes book.  The C routines are full of messy
> conversions from 0-based to 1-based.  Ugh.

I contend that if they had decided to just write the C versions as C 
instead of C-wishing-it-were-Fortran, they would have made a much better 
library. Still sucky, but that's another story.

> Again, this (along with nested scopes and various other things) was
> all figured out by the Algol-60 designers almost 50 years ago.  In
> Algol-60 you could just say "integer x(3..20)" and get a 3-based array
> (I may have the syntax slightly wrong by now).  It was useful and took
> care of this problem.

There's nothing that stops you from writing a class that does this. I 
believe someone posted such a one to this thread.

I have yet to see a concrete proposal on how to make lists operate like 
this.

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
  Are the graves of dreams allowed to die."
   -- Richard Harter




More information about the Python-list mailing list