[Python-es] listas de cadenas de caracteres

Chema Cortés chemacortes en wanadoo.es
Mie Ago 28 13:56:12 CEST 2002


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El Mar 27 Ago 2002 16:13, Hernan Martinez Foffani escribió:
> > > - Después buscas cuál es la letra con mayor frecuencia. Como no
> > > va a haber demasiadas letras, (máximo 28...) pues quizás lo mejor
> > > es hacer:
> > >
> > > letra_max = ''
> > > for letra in frecuencia.keys():
> > >       if frecuencia[letra] > frecuencia[letra_max]:
> > >           letra_max = letra
> >
> > Hay un método mejor:
> >
> > letra_max=max(frecuencia)
>
> en diccionarios max() se aplica sobre las claves.
> en este ejemplo devuelve la letra mas alta (en ascii)
> y no la letra cuya frecuencia sea la mayor.

Cierto. Se nota que ayer no tuve un buen día :-S

La solución debería también considerar que varias letras pueden tener la misma 
frecuencia. Algo tal que así:

m=0
letras_max=[]
for letra in frecuencia.keys():
    if frecuencia[letra] > m:
        m=frecuencia[letra]
        letras_max=[letra]  # olvidamos lo que hubiera hasta ahora
    elif frecuencia[letra]==m:
        letras_max.append(letra)


Algo más conciso, pero menos legible:

m=max(frecuencia.values())
letras_max=filter(lambda x: frecuencia[x]==m, frecuencia.keys())

o, mi versión preferida para buscar claves en diccionarios:

m=max(frecuencia.values())
letras_max=[k for k,v in frecuencia.items() if v==m]


Saludos,
- -- 
Chema Cortes (chemacortes en wanadoo.es) | LinuxUser#142755 - SuSE Linux 8.0
 ZARALINUX   http://www.zaralinux.org | "La ignorancia se apodera de quien
  PYTANDO  http://pytando.sf.net      |  se contenta con lo que sabe"
   PGPKEY: mailto:chemacortes en wanadoo.es?subject=__PGPKEY__


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9bLpfHLTQrABk8H0RAg3PAKDCqT+vE03N/g5Ap3ertzBO11ksSQCg+9Wy
4umGQEo73zxsdYKjrpDYYcU=
=NYZ0
-----END PGP SIGNATURE-----






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