[Python-Dev] Use for enumerate()

holger krekel pyth@devel.trillke.net
Sat, 27 Apr 2002 04:41:23 +0200

On Fri, Apr 26, 2002 at 08:56:31PM -0400, Tim Peters wrote:
> The attached g2 is about 60% quicker across the text files I tried it on,
> using this timing driver (which sums the time across all interesting inputs;
> note that, overall, this is quadratic-time in the number or lines for either
> method):

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
        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 :-)