[Python] media di un generatore

Piergiuliano Bossi pgbossi a gmail.com
Mer 11 Dic 2013 04:52:51 CET


2013/12/10 Marco Chieppa | crap0101 <crap0101 a riseup.net>

> Il giorno Tue, 10 Dec 2013 18:58:48 -0500
> Piergiuliano Bossi <pgbossi a gmail.com> ha scritto:
>
> > On Tuesday, December 10, 2013, Marco Beri wrote:
> > [...]
> > >
> > > def avg(gen):
> > >     n, sum_ = 0, 0.0
> > >     for v in gen:
> > >         sum_ += v
> > >         n += 1
> > >     return sum_ / n
> > >
> > > Cos'ha questo di brutto? Tra l'altro funziona anche con le liste e le
> > > tuple..
> > >
> > >
> > >
> > Nulla, ma è il modo più idiomatico di farlo? Fate tutti così? Dai
> > confessa... :)
> >
>
> non molto diverso in realtà... ma potresti usare enumerate:
>
> def avg(seq):
>     tot = 0.0
>     for n, v in enumerate(seq, 1):
>         tot += v
>     try:
>         return tot / n
>     except UnboundLocalError:
>         return 0 # ???
>
>
Si', non male.
Penso che quello che mi spiazza di piu' e' il non utilizzo idiomatico di
sum nelle soluzioni che mi fate vedere.

capisco che il try/except finale non è molto bello, ma forse lo
> dovrai/vorrai
> utilizzare anche con altri metodi, nel caso in cui passi una sequenza che
> non
> contiene alcun elemento (ad esempio nell'altro codice sopra avresti un
> ZeroDivisionError).
>
>
Nel mio caso sono sicuro di avere sempre svariate migliaia di elementi
nella sequenza, ma capisco cosa intendi e hai ragione.


> Non ho capito bene quando parli di
>
> > la creazione di 2 iteratori in itertools.izip(*generator)
>
> non mi pare faccia quello che ti serve, forse intendevi itertools.tee ?
>

Si', itertools.tee fa quello che volevo meglio di come mi sono messo a
usare itertools.izip :)


> Quest'ultimo potrebbe essere una soluzione però non credo valga la pena di
> creare dei doppioni (soprattutto con sequenze lunghe) quando puoi fare con
> un
> unico for...
>

Concordo, ed era il senso del mio secondo messaggio.

Sono un po' stupito che nessuno di voi mi dica di caricare in una lista...

Grazie
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/30e57c3a/attachment-0001.html>


Maggiori informazioni sulla lista Python