我正在为一个学校项目做这个(所以我不能使用任何高级功能)而且我正在使用Python 2.6.6。
我有一个从1到1000的数字列表,我的种子将是448。
如何使用该种子生成随机序列,以便列表中的数字位于不同的索引中?
是否有可能,知道种子,将列表中的元素返回到初始位置?
很抱歉,如果我的问题令人困惑,但英语不是我的母语。
感谢。
答案 0 :(得分:37)
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的原始排序。
答案 1 :(得分:2)
对python文档进行简单检查 http://docs.python.org/library/random.html 告诉你有关
的信息random.seed([x])
可用于初始化种子。
要再次按初始顺序获取项目,请再次设置种子并再次获取随机数。然后,您可以使用此索引获取列表中的内容,或者只使用索引。
您只需对列表进行排序,它将再次按排序顺序排列。