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