obtener media
Arnau Sanchez
pyarnau en gmail.com
Jue Jul 9 21:31:51 CEST 2009
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
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es