在Python中将一个长列表拖拽更长的次数

src*_*nas 5 python random algorithm montecarlo python-3.x

我想要很长一段时间(比如10000)将一个很长的序列(比如它有超过10000个元素)洗牌.阅读Python Random文档时,我发现了以下内容:

注意,即使对于小len(x),x的排列总数也可以快速增长,大于大多数随机数生成器的周期.这意味着永远不会产生长序列的大多数排列.例如,长度为2080的序列是可以在Mersenne Twister随机数生成器的周期内拟合的最大序列

我有两组(可能更多),每组都有很多值.我想要随机播放的序列是所有可用值的列表,无论该组如何.我担心的是这个说明意味着我需要的shuffle可能不是由random.shuffle()函数提供的.

我考虑过一些变通方法:

  • 在某些迭代中初始化随机数生成器(使用random.seed())几个.这样,排列是否超过周期并不重要,因为不同的种子会得到不同的结果.
  • 使用样本(范围(序列的长度),k =组的大小)来获得随机索引,然后使用这些索引在每个组中进行索引.这样,由于随机数生成器的周期,我可能不会耗尽排列.

我的替代品会有帮助吗?

非常感谢!

Pad*_*118 2

嗯,10,000! ~= 10^36,000这是很多可能的排列。您能做的最好的事情就是深入研究您的操作系统或硬件如何累积“真正随机”的位。然后,您可以等待大约 120,000 位您可以接受的随机性,然后使用在给定随机 n 的情况下生成输入列表的第 n 个排列的算法。