[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