[Python] Conversione tupla in intero
Valerio De Carolis
v.decarolis a yahoo.it
Gio 10 Feb 2011 21:07:12 CET
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
Maggiori informazioni sulla lista
Python