[Python] media di un generatore

Piergiuliano Bossi pgbossi a gmail.com
Mer 11 Dic 2013 05:12:00 CET


2013/12/10 Dario Bertini <berdario a gmail.com>

> 2013/12/10 Piergiuliano Bossi <pgbossi a gmail.com>:
> >>>> def avg(gen):
> > ...     x = itertools.izip(*((i, 1) for i in gen))
> > ...     return float(sum(x.next())) / sum(x.next())
> > ...
>
> Capisco l'attrattiva del problema, ma questo non fa assolutamente
> quello che vuoi, a causa dell'unpacking degli argomenti di izip
>

Si', sono un po' duro di comprendonio ma alla fine ci sono arrivato. :)


>
>
> sum(range(10000000))
>
> sum di per se invece è in grado di lavorare tranquillamente sui
> generatori senza fare allocazioni superflue
>

Infatti quello che volevo era proprio usare sum e intanto contare gli
elementi per fare un unico calcolo alla fine.


>
> qualcosa di interessante per te magari può essere calcolare tutte le
> medie intermedie (media mobile?)
>
>
No, nel mio caso specifico non mi serve, ma bella soluzione comunque.


> from itertools import accumulate, islice
>
>
Non male itertools.accumulate, ma ho un vincolo di compatibilita' con
python 2.7

Quindi nessun modo idiomatico usando sum?

In un mondo ideale vorrei poter scrivere qualcosa come questo:
>>> sum(v for n, v in enumerate(gen, 1))/n
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

Oppure sarebbe bello se potessi iniettare un n che funge da lvalue in quel
ciclo di sopra e che magicamente alla fine vale quanto l'ultimo indice di
enumerate.

Grazie e ciao
Giuliano


-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131210/67ee032b/attachment.html>


Maggiori informazioni sulla lista Python