sobre listas

dvilla en gmx.net dvilla en gmx.net
Mar Ago 19 12:11:51 CEST 2003


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.

Saludos,


El Tue, 19 Aug 2003 10:16:59 +0200
Chema Cortés <ch3m4 en ch3m4.org> escribió:

> Sonia escribió:
> 
> > hola!
> > si tengo una lista de palabras
> > como puedo saber la letra mas frecuente q hay entre todas las palabras
> >  
> > con solo palabras esta claro:
> > for palabra in lista:
> > ....
> >  
> > pero para las letras,supongo q seria:
> >  
> > for palabra in lista:
> >     for letra in palabras:
> >         #creo otra lista_frecuencia y digo ahora  for letra in 
> > lista_frecuencia???
> >         #y pongo todas las letras iguales en una lista, depues las 
> > cuento, guardo el numero y pongo la lista en [] para otra letra??
> >         #es este un camino correcto??
> 
> Vas bien encaminada, pero te falta pensar mejor cómo almacenar los 
> resultados. En lugar de ir guardando las letras iguales en otra lista, 
> lo mejor es que vayas contando. El problema conceptual de este ejercicio 
> es que no te basta con un sólo contador, sino que tendrás que utilizar 
> una lista de ellos.
> 
> Suponiendo que las palabras sólo usan ascii, tendrás que utilizar una 
> lista de 256 contadores:
> 
> lista_frecuencia=[0]*256
> 
> donde lista_frecuencia[i] será la frecuencia de la letra de código ascii 'i'
> 
> (te dejo que lo resuelvas por tí misma)
> 
> 
> Como corolario, hay que decir que en python se pueden utilizar unicodes, 
> y que no bastaría con una lista de 256 elementos de contadores. La 
> solución pasaría por utilizar diccionarios en lugar de listas. Lo dejo 
> como ejercicio.
> 
> 
> _______________________________________________
> 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