[Python] media di un generatore
Marco Chieppa | crap0101
crap0101 a riseup.net
Mer 11 Dic 2013 14:30:35 CET
Il giorno Tue, 10 Dec 2013 23:20:10 -0500
Piergiuliano Bossi <pgbossi a gmail.com> ha scritto:
> Pensiero malvagio:
> - con enumerate genero una serie di coppie (v, n)
> - le zippo e quindi ottengo 2 sequenze (v1, v2, ...) e (1, 2, ...) =>
> assumo di poter zippare le generator expression, oppure gia' qui sto
> sbagliando?
> - calcolo le somme di entrambe
> - sfrutto il fatto che sum(1, 2, ...) altri non e' che n * (n + 1) / 2, per
> cui divido sum(v1, v2, ...) per la soluzione positiva di n^2 + n - 2 *
> sum(1, 2, ...) = 0, cioe' 1/2 * (sqrt(8 * sum(1, 2, ..) + 1) - 1)
>
>
> Potrebbe funzionare, ma e' talmente assurdo che manco ci provo a vedere se
> sto toppando qualcosa. :)
>
mhh... magari funziona però non mi sembra molto conveniente e
soprattutto leggibile stare a zippare e unzippare più del necessario.
Inoltre, invece di fare tutti quei calcoli con sqrt e altro, basta _non_
usare enumerate ma "simularlo" con una genexpr che yielda tuple di valori
della sequenza in uso e "uni" che poi sommi tra loro senza fare altre
operazioni, tipo così:
import itertools, operator
def avgfoo(seq):
try:
return operator.div(*map(sum, itertools.izip(*((x, 1.) for x in seq))))
except TypeError:
return 0
avgfoo(range(10)) # 4.5
che però oltre ad essere molto meno leggibile dovrebbe essere anche
(molto) meno efficiente e inutilmente complessa.
--
me -> http://crap0101.gnu-darwin.org/
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: signature.asc
Tipo: application/pgp-signature
Dimensione: 836 bytes
Descrizione: non disponibile
URL: <http://lists.python.it/pipermail/python/attachments/20131211/302e1f5a/attachment.pgp>
Maggiori informazioni sulla lista
Python