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