[Python-Dev] Use for enumerate() (original) (raw)

Raymond Hettinger python@rcn.com
Sat, 27 Apr 2002 01:08:43 -0400


Challenge 3: do it faster and with less code.

def getline(filename, lineno): if lineno < 1: return '' f = open(filename) i, line = zip(xrange(lineno), f)[-1] f.close() if i+1 == lineno: return line return ''

To keep to the spirit of the challenge, I'm ignoring that the function is i/o bound which would lead to using an 'rb' read and doing .finds or .counts on '\n'.

The approach is to vectorize, trading away memory allocation time and xrange time to save the overhead of the pure Python loop and test cycle.

The test is saved by taking advantage of zip's feature which stops when the first iterator is exhausted.

Raymond Hettinger