[Python-Dev] Use for enumerate() (original) (raw)
Tim Peters tim.one@comcast.net
Sat, 27 Apr 2002 00:24:46 -0400
- Previous message: [Python-Dev] Use for enumerate()
- Next message: [Python-Dev] Use for enumerate()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[holger krekel]
measured with your driver script the following code is about 10-20% faster than 'g2' and it gets close to
> > Challenge 3: do it faster and with less code. def g3(filename, lineno): if lineno>0: f = file(filename) while lineno>0: read = f.read(1024) count = read.count('\n') lineno-=count or lineno f.close() if lineno<count: return read.split('\n')[lineno+count-1] return '' vertically it's one line less but it stretches a bit horizontally. But it is more portable :-)
What if (the simplest example of what can go wrong) the first line is more than 1024 characters long, and the caller asks for lineno 1? The argument to f.readlines(5000) is just a hint, and Python does whatever is necessary under the covers to ensure only complete lines are returned (even if it has to read millions of bytes to get a full line). The argument to f.read(1024) is a maximum, whether or not it finds a newline.
Of course Guido never explicitly said it had to return a correct answer, in which case I vote for
g=lambda*a:''
as both shortest and fastest by any measures .
- Previous message: [Python-Dev] Use for enumerate()
- Next message: [Python-Dev] Use for enumerate()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]