Il 10/02/2011 19:04, Simone Federici 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
Interessante, le prestazioni calano molto se si passa sotto Python3: t1 = Timer(""" from functools import reduce 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)) """) t4 = Timer(""" int( ('{}' * 7).format(3,2,6,7,1,21,2) ) """) "Reduce: {0} | List comprehension: {1} | String {2} | Format {3}".format(t1.timeit(), t2.timeit(), t3.timeit(), t4.timeit()) Reduce: 3.8765668869 | List comprehension: 5.3515920639 | String 4.34776806831 | Format 5.56084609032 Considerando che il 4° test è supportato solo dal 3.1+: il confronto tra i due metodi di formatting mi ha lasciato un po' spiazzato. Cosa introduce la penalità nel 4° medoto? Forse il fatto che format deve capire che tipo viene passato? Sulla stessa macchina con Python 2 (test precedente): Reduce: 1.5680270195 | List comprehension: 3.70982694626 | String% 1.97485089302 Molto meglio, molto veloce! (Linux, x86_64, 2.6.5) Ciao, Valerio -- Valerio De Carolis - http://www.decabyte.it "To invent an airplane is nothing. To build an airplane is something. But to fly ... is everything. - Ferdinand Ferber" __________________________________________________ Do You Yahoo!? Poco spazio e tanto spam? Yahoo! Mail ti protegge dallo spam e ti da tanto spazio gratuito per i tuoi file e i messaggi http://mail.yahoo.it _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python