<div dir="ltr">2013/9/17 Piergiuliano Bossi <span dir="ltr"><<a href="mailto:pgbossi@gmail.com" target="_blank">pgbossi@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div><div class="im"><div>>>> a = [2, -4, 27, 44, 13, 0]</div></div><div>>>> len(x for x in a if x > 5)<br>
</div><div class="im"><div>Traceback (most recent call last):</div><div> File "<stdin>", line 1, in <module></div></div><div>TypeError: object of type 'generator' has no len()</div><div>>>> len([x for x in a if x > 5])</div>
<div>3</div><div>>>> list_max = max(a)</div><div>>>> len([x for x in a if x == list_max])</div><div>1</div></div><div><div>>>> len([x for x in a if x == max(a)]) # anche cosi' insomma</div>
<div>
1</div></div></div></div></div></blockquote><div><br></div><div>Per quel che vale, come performance molto, molto meglio la prima versione:</div><div><br></div><div>>>> import timeit</div><div><div>>>> timeit.timeit("len([1 for x in a if x == max(a)])", "a = [2, -4, 27, 44, 13, 0]")</div>
<div>5.89989202538311</div><div>>>> timeit.timeit("len([1 for x in a if x == max_a])", "a = [2, -4, 27, 44, 13, 0];max_a=max(a)")</div><div>1.4572058739309028</div><div><br></div></div><div>Circa 4 volte più veloce, come è ovvio visto che fa una volta sola max invece che 5.</div>
<div><br></div><div>Oltre al fatto che mi da un certo fastidio usare una funzione su una lista che sto percorrendo.</div><div><br></div><div>Ciao.<br>Marco.</div><div><br></div></div>-- <br><div><div><div><div><a href="http://beri.it/" target="_blank">http://beri.it/</a> - Un blog</div>
<div><a href="http://beri.it/i-miei-libri/" target="_blank">http://beri.it/i-miei-libri/</a> - Qualche libro</div><div><br></div></div></div></div>
</div></div>