Python random sequence with seed

import random
SEED = 448

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

print myList

results in

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

Your list is now pseudorandomized.

'Pseudo' is important, because all lists having the same seed and number of items will return in the same 'random' order. We can use this to un-shuffle your list; if it were truly random, this would be impossible.

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

results in

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

Tada! originalList is now the original ordering of myList.


A simple check on the python docs http://docs.python.org/library/random.html tells you about

random.seed([x])

which you can use to initialize the seed.

To get the items in the order of your initial again, set the seed again and get the random numbers again. You can then use this index to get the content in the list or just use the index for whatever.

You’d just sort the list and it’d be in sorted order again.

Tags:

Python

Random