我有一个函数,为了简单起见,我将它称为shuffler,它需要一个列表,随机提供一个种子17,然后打印那个洗牌的列表。
def shuffler( n ):
import random
random.seed( 17 )
print( random.shuffle( n ) )
我如何创建另一个名为unshuffler的函数" unshuffles" shuffler()返回的那个列表,把它带回我输入shuffler()的列表,假设我知道种子?
答案 0 :(得分:3)
使用有问题的种子重新组织随机生成器,然后将列表1,2,...,n洗牌。这告诉你到底是什么结果在洗牌中。
答案 1 :(得分:0)
以下两个功能可满足您的需求:
import random
import numpy as np
def shuffle_forward(l):
order = range(len(l)); random.shuffle(order)
return list(np.array(l)[order]), order
def shuffle_backward(l, order):
l_out = [0] * len(l)
for i, j in enumerate(order):
l_out[j] = l[i]
return l_out
示例强>
l = range(10000); random.shuffle(l)
l_shuf, order = shuffle_forward(l)
l_unshuffled = shuffle_backward(l_shuf, order)
print l == l_unshuffled
#True
答案 2 :(得分:0)
在 Python3 中:
import random
import numpy as np
def shuffle_forward(l):
order = list(range(len(l)); random.shuffle(order))
return list(np.array(l)[order]), order
def shuffle_backward(l, order):
l_out = [0] * len(l)
for i, j in enumerate(order):
l_out[j] = l[i]
return l_out