Duda sobre "aleatorizar" una lista
Pablo Ruiz Múzquiz
pabloruiz en gnu.org
Dom Mar 7 02:22:52 CET 2004
Respondo a César:
>>> random.shuffle(l);l
['b', 'c', 'a', 'd']
No, no vale porque mi intención es escribir esa orden dentro de otra tal
que:
"texto" + " ".join(random.shuffle(l);l)
y, claro, da un syntax error como una catedral (o un bazar). Pero de no
tener esa necesidad, claro que habría valido :-) Muchas gracias
Respondo a Marcos:
> random.shuffle(l) or l
Cuando lo vi pensé que sí. Pero luego, al usarlo con el join, me dio
este error:
''.join(random.shuffle(l) or l)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: sequence item 0: expected string, int found
Para no liaros más os pego el código que yo he escrito hasta ahora. Son
4 líneas pero _tiene_ que poderse hacer en dos!
El programa toma un texto de la entrada estándar y los convierte a un
tipo de léxico que tiene una curiosa propiedad: las letras primera y
última se mantienen y las de en medio salen descolocadas. Por efecto de
nuestra memoria, el cerebro reconoce las palabras a pesar del orden
erróneo de sus letras y el texto puede leerse perfectamente:
-------------------------------------
import sys, random
def azar(l):
if not random.shuffle(l): return l
print ' '.join([p[0]+''.join(azar(list(p[1:-1])))+p[-1] for p in
sys.argv[1].split()])
--------------------------------------
Ejemplo de texto de entrada:
"Un pajaro vuela sobre la campana mas alta de la iglesia"
El programa devuelve (por ejemplo):
"Un prjaao velua srboe la cpnaama mas atla de la ielgsia"
Como podéis ver, hago uso de la función azar (que usa un poco la idea de
Marcos con su OR) pero que me deja un mal sabor de boca.
Si no hubiese tenido que manipular el resultado para otras cosas, las
dos soluciones habrían valido perfectamente, pero ya veis que no es el
caso.
Un saludo,
Pablo Ruiz Múzquiz
Más información sobre la lista de distribución Python-es