擅长:python、mysql、java
<p>您可以选择某种算法来确定一个种子,该种子可以从列表本身派生而不依赖于其顺序。在</p>
<p>对于示例数据结构,种子可以是所有值的总和。然后用这个种子生成一个从0到n-1的随机(但具有确定性)排列。然后,该排列可作为洗牌和取消缓冲函数的基础:</p>
<pre><code>import random
def getperm(l):
seed = sum(sum(a) for a in l)
random.seed(seed)
perm = list(range(len(l)))
random.shuffle(perm)
random.seed() # optional, in order to not impact other code based on random
return perm
def shuffle(l):
perm = getperm(l)
l[:] = [l[j] for j in perm]
def unshuffle(l):
perm = getperm(l)
res = [None] * len(l)
for i, j in enumerate(perm):
res[j] = l[i]
l[:] = res
</code></pre>
<p>示例调用:</p>
^{pr2}$