[Python] Conversione tupla in intero

Gianluca Bargelli g.bargelli a gmail.com
Gio 10 Feb 2011 19:41:10 CET


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.federici a 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.lobos a 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 a lists.python.it
>> http://lists.python.it/mailman/listinfo/python
>>
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>

-- 
-Gianluca
http://proudlygeek.appspot.com


Maggiori informazioni sulla lista Python