>>> from timeit import Timer >>> t1 = Timer(""" reduce(lambda x, y: x*10+y, (3,2,6,7,1,21,2)) """) >>> t2 = Timer(""" "".join([str(i) for i in (3,2,6,7,1,21,2)]) """) >>> t3 = Timer(""" int( '%s' * 7 % (3,2,6,7,1,21,2)) """) >>> "Reduce: {0} | List comprehension: {1} | String% {2}".format(t1.timeit(), t2.timeit(), t3.timeit()) 'Reduce: 1.77485489845 | List comprehension: 3.06255602837 | String% 1.46671390533' >>> "Reduce: {0} | List comprehension: {1} | String% {2}".format(t1.timeit(), t2.timeit(), t3.timeit()) 'Reduce: 1.77306890488 | List comprehension: 3.03216409683 | String% 1.43420696259'
Indefinitiva, la terza è la più rapida da me. La prima è un ottimo compromesso ma ha il difetto di errare i calcoli se la tupla contiene interi>9 La seconda è tragica ciao S 2011/2/10 Paolo Bernardi <villa.lo...@tiscali.it> > I numeri, in assoluto, non vogliono dire granché, lordkrandel... Troppa > variabilità di hardware e software. ;-) Piuttosto, esegui il timer di > tutti e tre i metodi sul tuo computer e confronta i risultati, così > quantomeno hai una certa uniformità di base. :-) > > Paolo > > On Thu, 2011-02-10 at 18:22 +0100, lordkrandel wrote: > > On 10/02/2011 18.02, Gianluca Bargelli wrote: > > > t1 = Timer(""" reduce(lambda x, y: x*10+y, (1,2,3,4,5,6,7)) """) > > > t2 = Timer(""" "".join([str(i) for i in (1,2,3,4,5,6,7)]) """) > > > "Reduce: 1.58372807503 | List comprehension: 2.46447396278" > > > usando Python 2.6.6 (Linux), qualcuno sa spiegare il perché di tale > > > differenza? :-) > > > > Sicuramente perchè non passi per la conversione in stringa, tagliando > > fuori tutti i problemi di charset etc... > > > > >>> Timer(""" int('%s' * 7 % tuple(range(1,8)))""").timeit() > > 2.3354565150000006 > > > > > > > > > _______________________________________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > >
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python