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