2013/12/10 Dario Bertini <berda...@gmail.com> > 2013/12/10 Piergiuliano Bossi <pgbo...@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
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python