[Tutor] list comprehension problem
Emile van Sebille
emile at fenx.com
Sat Jul 4 01:19:04 CEST 2009
On 7/3/2009 3:54 PM Dinesh B Vadhia said...
> Thanks Emile / Kent.
>
> The problem I see with this solution is that at each stage it is
> re-summing the j's instead of retaining a running total which the
> 'for-loop' method does ie.
>
> >>> dd = []
> >>> y = d[0]
> >>> for i, x in enumerate(d):
> >>> y += x
> >>> dd.append(y)
>
> As the lists of integers get larger (mine are in the thousands of
> integers per list) the list comprehension solution will get slower. Do
> you agree?
Yes, no doubt. Your original post asked only if there was a listcomp
solution. There are probably listcomp solutions that are faster too.
I've not tried looking.
As a rule though, timing related optimizations are best done once a
bottleneck is identified. It certainly doesn't hurt to develop the
habit of writing clean efficient code, but I wouldn't normally look for
better ways of getting something done once I'd written a working
solution. In this case, IIRC, sum is highly efficient and for smaller
lists (on today's CPUs small might be 1000's of entries) might work just
fine. I wouldn't necessarily assume that the list comp is slower at a
certain size without testing. I'd bet the listcomp is faster on short
lists, and slower on long lists, but where the dividing line is could
only be known by testing. If you're interested, look into the timeit
module.
Emile
More information about the Tutor
mailing list