[Python] media di un generatore
Giovanni Porcari
giovanni.porcari a softwell.it
Mer 11 Dic 2013 14:26:26 CET
Il giorno 11/dic/2013, alle ore 05:12, Piergiuliano Bossi <pgbossi a gmail.com> ha scritto:
> 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
def gen(n):
i = 1
while i < n:
yield i
i += 1
class Enumerated(object):
def __init__(self, gen):
self.gen = gen
self._counter=0
def count(self):
return self._counter
def __iter__(self):
for k in self.gen:
self._counter += 1
yield(k)
def __getattr__(self,name):
return self.gen.__getattribute__(name)
if __name__=='__main__':
x=Enumerated(gen(100000))
print sum(x)/x.count()
Non so se ha senso e se assomiglia a quello che volevi
comunque anche questa potrebbe essere un' alternativa.
Ciao
G
Maggiori informazioni sulla lista
Python