带种子的Python随机序列
我正在做一个学校的项目(所以不能使用任何高级功能),我使用的是Python 2.6.6。
我有一个从1到1000的数字列表,还有一个种子(比如448)。
我该如何用这个种子生成一个随机的序列,让我列表中的数字在不同的位置呢?
而且,如果知道这个种子,能不能把列表恢复到原来的顺序呢?
2 个回答
3
在Python的官方文档上简单查一下,
http://docs.python.org/library/random.html你会了解到
random.seed([x])
这个可以用来初始化随机数的种子。
如果你想要再次得到和最开始一样的随机顺序,只需要重新设置种子,然后再生成随机数。这样你就可以用这个索引来获取列表中的内容,或者用这个索引做其他事情。
你只需要对列表进行排序,它就会变成有序的状态。
52
import random
SEED = 448
myList = [ 'list', 'elements', 'go', 'here' ]
random.seed(SEED)
random.shuffle(myList)
print myList
结果是
['here', 'go', 'list', 'elements']
你的列表现在是伪随机的。
这里的“伪”很重要,因为所有使用相同种子和相同数量的项目的列表都会以相同的“随机”顺序返回。我们可以利用这一点来恢复你的列表的顺序;如果它是真正随机的,那就不可能做到这一点。
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
结果是
['list', 'elements', 'go', 'here']
好了!originalList 现在是 myList 的原始顺序。