[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