Inefficient summing

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Wed Oct 8 14:35:38 EDT 2008


beginner a écrit :
> Hi All,
> 
> I have a list of records like below:
> 
> rec=[{"F1":1, "F2":2}, {"F1":3, "F2":4} ]
> 
> Now I want to write code to find out the ratio of the sums of the two
> fields.
> 
> One thing I can do is:
> 
> sum(r["F1"] for r in rec)/sum(r["F2"] for r in rec)
> 
> But this is slow because I have to iterate through the list twice.
> Also, in the case where rec is an iterator, it does not work.
> 
> I can also do this:
> 
> sum1, sum2= reduce(lambda x, y: (x[0]+y[0], x[1]+y[1]), ((r["F1"],
> r["F2"]) for r in rec))
> sum1/sum2
> 
> This loops through the list only once, and is probably more efficient,
> but it is less readable.
> 
> I can of course use an old-fashioned loop. This is more readable, but
> also more verbose.
> 
> What is the best way, I wonder?

The best way is the one that give you the correct answer while being 
fast enough - for a definition of 'fast enough' that is highly 
project-specific - and still readable - for a definition of 'readable' 
that may be somehow subjective, but clearly favours a plain for loop 
over your 'I can also do this' snippet.




More information about the Python-list mailing list