带有种子的固定随机排列

A fixed, random permutation with a seed

我想在数据框中获取一个字符串列 C1,或者您可以想象一个字符串列表,我想得到一个新列,其中的条目按行随机排列C1 中行中的元素。具体来说,我想要由种子定义的每个元素的固定排列。它会像函数 f 一样工作,其中满足以下条件:

f(a) = b

如果我再运行它

f(a) = b

其中 b 是 a 的随机排列。我希望 f 被一些种子参数化,这样我就可以很容易地创建一个新函数 g,它也是一个满足

的随机排列

g(a) = c 不等于 b

当我再次运行时

g(a) = c 不等于 b

本质上,我想要一个随机排列函数的列表,每个排列函数都由某些东西(比如一个整数)参数化并且在给定固定种子的情况下是可重复的。或者,换句话说,我想要一种通过提供种子来创建新的修复、随机排列函数的方法。

为了向您展示我的意思,我快速搜索并找到了这个网站:

https://note.nkmk.me/en/python-random-shuffle/

导致此代码:

sr = ''.join(random.sample(s, len(s)))

这是一个随机排列,但不可重复。这意味着当你再次调用它时

sr = ''.join(random.sample(s, len(s)))

sr 不一样,这意味着您“没有”固定的随机排列函数。因此,几分钟的搜索不会产生任何结果。我相信有一种规范的方法来获得这些随机排列函数,我需要有人来展示这种规范的方法。

编辑: 看起来我没有正确使用种子(或根本没有)。如果您按以下方式调用随机样本,您将获得一个可重复的随机排列函数:

>>> random.seed(53434)
>>> print(''.join(random.sample(a,len(a))))

当您想将随机抽样重置为可预测状态时,您只需调用 random.seed()

>>> random.seed(10)
>>> "".join(random.sample("asdfqwerzxcv", 12))
'xaercsfwdqzv'
>>> "".join(random.sample("asdfqwerzxcv", 12))
'zrwsfxdacqve'
>>> random.seed(10)
>>> "".join(random.sample("asdfqwerzxcv", 12))
'xaercsfwdqzv'
>>> "".join(random.sample("asdfqwerzxcv", 12))
'zrwsfxdacqve'