Re: obtener media

Arnau Sanchez <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
Antonio Reyes wrote:

> hola, tengo el siguiente problema que espero me puedan orientar. tengo 
> una lista con un formato como el de abajo. lo que necesito hacer es 
> sumar todos los valores de una misma palabra y dividirlo entre el número 
> de líneas en las que aparece esa palabra. por ejemplo: 'aberration' 
> aparece en 3 líneas con valores distintos (2,3; 7,7; 8,7). el total de 
> estos valores es 34, la media de ellos sería 34/3, mientras que para 
> 'abrasion' sería 35/2 y para 'abutment' sería 9/1. tienen alguna idea de 
> cómo puedo resolverlo? gracias

Yo optaría por una solución funcional usando itertools.groupby y generadores. Si 
no estás familiarizado con este módulo el código puede parecerte algo críptico, 
pero el resultado es muy compacto. Por ejemplo:

#!/usr/bin/python
import itertools
import sys

def get_mean(inputlines):
     def _get_word(line):
         return line.split("[")[0]
     for word, linesiter in itertools.groupby(inputlines, _get_word):
         linesacc = [sum(map(int, line.split()[2:4])) for line in linesiter]
         yield word, float(sum(linesacc)) / len(linesacc)


for word, mean in get_mean(sys.stdin):
     print word, mean


El bucle final es sólo para que puedas usarlo como script. Si tus datos, por 
ejemplo, están en el fichero m.txt, podrías hacer:

$ python get_mean.py < m.txt
aberration 11.3333333333
abrasion 17.5
abruptness 10.6666666667
absoluteness 8.0
abutment 9.0


-- 
Desarrollador freelance
http://www.arnau-sanchez.com

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.