I miei risultati: (Python 2.6.6 Linux 64 bit su Intel Core duo T8100 @ 2.10 Ghz, 3 Gb Ram):
Reduce: 1.50118589401 | List comprehension: 2.42310404778 | String: 1.31533288956 È logico pensare che la join+conversione sia l'overhead della List Comprehension...ma come si spiega la velocità di "String"? La formattazione viene eseguita direttamente in codice C? Il 10 febbraio 2011 19:04, Simone Federici <s.feder...@gmail.com> ha scritto: >>>> 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 > > -- -Gianluca http://proudlygeek.appspot.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python