2010-12-29 12 views
8

Hola Estoy haciendo esto para un proyecto escolar (por lo que no puedo usar ninguna característica avanzada) y estoy usando Python 2.6.6.Secuencia al azar Python con semilla

que tienen una lista de números del 1 al 1000 y mi semilla será, digamos, 448.

¿Cómo puedo generar una secuencia aleatoria con esa semilla para que los números en mi lista estarán en una índice diferente?

¿Y es posible, conociendo la semilla, devolver los elementos de mi lista a la posición inicial?

Lo siento si es confuso pero el inglés no es mi lengua materna.

Gracias,

Favolas

+1

http://docs.python.org/release/2.6.6/library/random.html le contaré todo lo que necesita saber –

+0

@Rafe He leído eso antes pero no entendí – Favolas

Respuesta

24
import random 
SEED = 448 

myList = [ 'list', 'elements', 'go', 'here' ] 
random.seed(SEED) 
random.shuffle(myList) 

print myList 

resultados en

['here', 'go', 'list', 'elements'] 

su lista es ahora pseudorandomized.

'Pseudo' es importante, porque todas las listas que tengan la misma semilla y la misma cantidad de elementos regresarán en el mismo orden 'aleatorio'. Podemos usar esto para des-mezclar tu lista; si fuera verdaderamente aleatorio, esto sería imposible.

Order = list(range(len(myList))) 
# Order is a list having the same number of items as myList, 
# where each position's value equals its index 

random.seed(SEED) 
random.shuffle(Order) 
# Order is now shuffled in the same order as myList; 
# so each position's value equals its original index 

originalList = [0]*len(myList) # empty list, but the right length 
for index,originalIndex in enumerate(Order): 
    originalList[originalIndex] = myList[index] 
    # copy each item back to its original index 

print originalList 

resultados en

['list', 'elements', 'go', 'here'] 

Tada! originalList ahora es el pedido original de myList.

+0

gracias Hugh. Eso resolvió mi pregunta – Favolas

1

una sencilla comprobación de la documentación de Python http://docs.python.org/library/random.html le informa sobre

random.seed([x]) 

que se puede utilizar para inicializar la semilla.

Para volver a obtener los elementos en el orden de su inicialización, configure la semilla nuevamente y obtenga los números aleatorios de nuevo. Luego puede usar este índice para obtener el contenido en la lista o simplemente usar el índice para lo que sea.

Solo ordenarías la lista y estaría en orden ordenado nuevamente.

+0

Tengo leí eso antes pero no entendí. He hecho random.seed (448) y no me da nada. ¿Cómo puedo usar este whitm en mi lista? – Favolas

+0

Establece la semilla con esa función de inicialización. A continuación, llama a otro método en ese módulo para obtener su próximo número aleatorio. – Kissaki