[Python-es] RE: continuo con las listas de cadenas de caracteres

Hernan Martinez Foffani hernan en orgmf.com.ar
Jue Ago 29 15:39:49 CEST 2002


para molestar un poco ...

> def contar(list):
             ^^^^---- lista

>     for palabra in lista:
>         for letra in palabra:
>             frecuencia[letra] = frecuencia.get(letra,0)+1

      for letra in "".join(lista):
          frecuencia[letra] = frecuencia.get(letra,0)+1

>     for letra in frecuencia:
>         if letra_max == ' ':
>             letra_max = letra #inicializo una, la primera del
>                               #dict, esto es lo que podrias
>                               #mejorar
>         elif (frecuencia[letra] > frecuencia[letra_max]):
>                 letra_max = letra

para sacar la inicialización fuera del ciclo, reusa la ultima
letra del ciclo anterior (o cualquiera que esté en lista).

    letra_max = letra    # tomo la ultima del ciclo anterior.
    for letra in frecuencia:
        if frecuencia[letra] > frecuencia[letra_max]:
            letra_max = letra

o mejor aún, una de las propuestas por Chema ("achicada" en
funcionalidad para seguir con el mismo ejemplo):

  m=max(frecuencia.values())
  letra_max=[k for k,v in frecuencia.items() if v==m][0]
                     # me quedo solo con una --------^^^

>     for pal in lista:
>         if letra_max in pal:
>             lis_resul.append(pal) # la lista resultado con las
>                                   # palabras que tienen a letra_max
>     return (letra_max,lis_resul)  #devuelvo las dos para luego
>                                   #poder imprimir ambas

aqui tambien las comprensiones de listas vienen bien:

    return letra_max, [pal for pal in lista if letra_max in pal]

aunque sospecho que Sonia no va a querer usarlas. ;-)

Saludos,
-Hernan







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