sobre listas

dvilla en gmx.net dvilla en gmx.net
Mar Ago 19 14:17:20 CEST 2003


Hola:

Ah, muy chulo. Lo de los LC aún no lo controlo. A mi me gusta el map() porque es
como el foreach de la STL y puedes ver el problema del mismo modo, pero me
apunto lo de los LC's. 

Saludos.

El Tue, 19 Aug 2003 13:29:11 +0200
Chema Cortés <ch3m4 en ch3m4.org> escribió:

> dvilla en gmx.net escribió:
> > Hola:
> > 
> > Yo estoy más de acuerdo con Mikel. Partes de una lista de palabras:
> > 
> > 
> >>>>listapal = ['hola','mundo','otra','vez']
> > 
> > 
> > Si siquieres la letra más frecuente puedes concatenar todas las palabras en
> > una sola:
> > 
> > 
> >>>>todo = ''.join(listapal)
> > 
> > 
> > Luego lo convertimos todo a ASCII (veremos porqué hago esto)
> > 
> > 
> >>>>todo = map(ord, todo)
> > 
> > 
> > Ahora calculamos la frecuencia de cada letra:
> > 
> > 
> >>>>frec = map(todo.count, range(0, 255)) 
> > 
> >  # range() sólo admite enteros, por eso hice el ord().
> > 
> > Y ya está, el indice del mayor elemento de frec es la letra más repetida.
> > 
> > Aqui pongo el código completo:


> > 
> > 
> > listapal = ['hola','mundo','otra','vez']
> > 
> > todo = map(ord, ''.join(listapal))
> > 
> > frec = map(todo.count, range(0, 255))
> > 	
> > letra = chr(frec.index(max(frec)))
> > 
> > print 'la letra mas repetida es "', letra, '"'
> > 
> > Puede parecer un poco confuso al principio pero si te habituas al map()
> > practicamente no tienes que hacer for's para nada. Si alguien tiene alguna
> > duda de cómo funciona esto que lo diga.
> 
> Es una solución bastante elegante. Tan sólo decirte un par de cosillas. 
> Cuida con el range() que (aunque aquí no va a ser importante) no incluye 
> el límite superior, o sea, debería ser range(0,256).
> 
> Y en cuanto al map(), ya hemos comentado alguna vez que se está dejando 
> de usar en favor de la compresión de listas. Con compresión de listas no 
> hubieras necesitado convertir la lista a códigos ascii:
> 
> listapal = ['hola','mundo','otra','vez']
> 
> todo = ''.join(listapal)
> 
> frec = [ todo.count(char(i)) for i in range(256) ]
> 	
> letra = chr(frec.index(max(frec)))
> 
> 
> Una solución algo más bestia, pero que también valdría para unicodes:
> 
> frec = [ todo.count(c) for c in todo ]
> letra = todo[frec.index(max(frec))]
> 
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 




Más información sobre la lista de distribución Python-es