[Python] l'amore per il pitone

Marco Beri marcoberi a gmail.com
Mer 18 Set 2013 00:09:23 CEST


2013/9/17 Piergiuliano Bossi <pgbossi a gmail.com>

>
> >>> a = [2, -4, 27, 44, 13, 0]
> >>> len(x for x in a if x > 5)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: object of type 'generator' has no len()
> >>> len([x for x in a if x > 5])
> 3
> >>> list_max = max(a)
> >>> len([x for x in a if x == list_max])
> 1
> >>> len([x for x in a if x == max(a)]) # anche cosi' insomma
>  1
>

Per quel che vale, come performance molto, molto meglio la prima versione:

>>> import timeit
>>> timeit.timeit("len([1 for x in a if x == max(a)])", "a = [2, -4, 27,
44, 13, 0]")
5.89989202538311
>>> timeit.timeit("len([1 for x in a if x == max_a])", "a = [2, -4, 27, 44,
13, 0];max_a=max(a)")
1.4572058739309028

Circa 4 volte più veloce, come è ovvio visto che fa una volta sola max
invece che 5.

Oltre al fatto che mi da un certo fastidio usare una funzione su una lista
che sto percorrendo.

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130918/6b05c5d9/attachment.html>


Maggiori informazioni sulla lista Python