Duda sobre "aleatorizar" una lista
Pablo Ruiz Múzquiz
pabloruiz en gnu.org
Dom Mar 7 12:09:38 CET 2004
El dom, 07-03-2004 a las 12:22, Afonso Fernández Nogueira escribió:
> Esto parece funcionar:
>
> ----
> import sys, random
>
> print ' '.join([p[0]+''.join((lambda x:random.shuffle(x) or
> x)(list(p[1:-1])))+p[-1] for p in
> sys.argv[1].split()])
> ----
>
> ¿Esto qué es, un concurso de Python enrevesado ;) ?
Muchas gracias. Me imaginaba que tenía que ser con funciones lambda pero
no caí en la cuenta del OR (aquí no).
-- explicación larga de este programa (puedes no leerla) ---
Y no, no es un concurso de Python ofuscado. Lo que sucede es que yo
siempre les digo a mis amigos que con python todo programa puede hacerse
en 4 ó 10 líneas. Naturalmente, me refiero a programas que resuelven
problemas específicos (aunque sean complejos).
Al hacer un programa que resolviera el problema este, salieron 20 líneas
(en plan verbose y tal). Y claro, me dijeron "No decías que cualquier
programa en python se hacía en 4 ó 10 líneas?". Así que me piqué y
empecé a reducir líneas de código. Pasé rápidamente de 20 a 15, luego de
15 a 11 y me dije "mira, si quito una más habré quedado bien". Pero ¡ay!
logré quitar 2 líneas de un solo golpe... y ya tuve que ir a las 4. Pasé
de 9 a 7, y de 7 a 4. Y las cuatro líneas son las que os enseñé ayer. Y
aunque podía haberme quedado contento... no lo estaba... porque veía que
tenía que haber una forma de hacerlo en 2. Y como me atasqué pedí ayuda
y os debo haber quedado genial :-)
Por otro lado ¿realmente podría existir un concurso de python
enrevesado? :-P
Un saludo,
Pablo Ruiz Múzquiz
Más información sobre la lista de distribución Python-es