Profiling, sum-comprehension vs reduce
cnb
circularfunc at yahoo.se
Sat Sep 13 04:06:22 EDT 2008
This must be because of implementation right? Shouldn't reduce be
faster since it iterates once over the list?
doesnt sum first construct the list then sum it?
-----------------------
>>> ================================ RESTART ================================
>>>
reduce with named function: 37.9864357062
reduce with nested, named function: 39.4710288598
reduce with lambda: 39.2463927678
sum comprehension: 25.9530121845
>>> ================================ RESTART ================================
>>>
reduce with named function: 36.4529584067
reduce with nested, named function: 37.6278529813
reduce with lambda: 38.2629448715
sum comprehension: 26.0197561422
>>>
from timeit import Timer
def add(x,y):
return x+y
def rednamed(lst):
return reduce(add, lst)
def rednn(lst):
def add2(x,y):
return x+y
return reduce(add2, lst)
def redlambda(lst):
return reduce(lambda x,y:x+y, lst)
def com(lst):
return sum(x for x in lst)
s = xrange(101)
t1 = Timer('rednamed(s)', 'from __main__ import rednamed, s')
t2 = Timer('rednn(s)', 'from __main__ import rednn, s')
t3 = Timer('redlambda(s)', 'from __main__ import redlambda, s')
t4 = Timer('com(s)', 'from __main__ import com, s')
print "reduce with named function: ", t1.timeit()
print "reduce with nested, named function: ", t2.timeit()
print "reduce with lambda: ", t3.timeit()
print "sum comprehension: ", t4.timeit()
---------------------------------------
also, using range instead of xrange doesnt seem to generate a
performance-penalty:
>>>
reduce with named function: 36.7560729087
reduce with nested, named function: 38.5393266463
reduce with lambda: 38.3852953378
sum comprehension: 27.9001007111
>>>
More information about the Python-list
mailing list