sobre listas
Chema Cortés
ch3m4 en ch3m4.org
Jue Ago 21 13:39:56 CEST 2003
Sonia escribió:
> dejo mi version a ver si hay mucha cosa mal
> recuerdo q el enunciado es , dada una cadena de palabras, mostrar las
> palabras q contienen la letra mas frecuente de esa cadena
>
> mi version(tradicional):
>
> (el join si q lo habia dado , lo demas nada de nada)
En general está muy bien.
> def frecuencia(lista):
> lista_todo=''.join(lista)
> #lista_todo=[pepedaleamigoernesto]
> #busco el caracter + frecuente en lista_todo
> #voy a lista y saco las palabras q contienen ese caracter
>
> max=0
> letra_max=[]
Si letra_max va a ser una letra, tal vez no necesites inicializarla como
si fuera una lista.
> lista_rdo=[]
> cont=1 #pq si la letra esta (minimo 1)
> for letra1 in range(0,len(lista_todo)):
> for letra2 in range(0,len(lista_todo)):
> #compara la 1 letra con todas...la 2º con todas...
> if lista_todo[letra1]==lista_todo[letra2]:
> cont=cont+1
> if cont>max:
> max=cont
> letra_max=lista_todo[letra1]
> cont=0
Hasta aquí todo bien. Quizás se podría haber utiliza otro algoritmo,
como los que te hemos sugerido en otros mensajes. Tal vez podrías
optimizar el algoritmo para no volver a contar más de una vez la misma
letra.
> for palabra in lista:
> for letra in palabra:
> if palabra[letra]==letra_max:
> lista_rdo.append(lista[palabra])
Aquí 'letra' y 'palabra' los estás empleando como índice. Más bien son
lo que parecen, una letra y una palabra respectivamente.
Tampoco sé si te lo han enseñado, pero el operador 'in' lo puedes
emplear con cadenas de caracteres para saber si una palabra tiene una
letra determinada:
for palabra in lista:
if letra_max in palabra:
print palabra
Más información sobre la lista de distribución Python-es