TL; DR:它在包含2080多个元素的列表上“断开”,但是不必太担心:)
完整答案:
首先,请注意,“改组”列表可以(在概念上)理解为生成列表元素的所有可能排列,并随机选择这些排列之一。
然后,您必须记住,所有独立的计算机化随机数生成器实际上都是“伪”随机数。也就是说,它们实际上并不是随机的,而是依靠一系列因素来尝试生成难以被高级或有目的地复制的数字。这些因素中通常是先前生成的数字。因此,在实践中,如果连续使用一定次数的随机数生成器,最终将再次从头开始获得相同的序列(这是文档所指的“期间”)。
最后,Lib / random.py(随机模块)上的文档字符串说:“(随机数生成器)的周期是
2**19937-1。”
因此,考虑到所有这些,如果您的列表中存在
2**19937多个或更多的排列,那么其中一些将永远无法通过对列表进行混排获得。您(再次,从概念上来说)将生成列表的所有排列,然后生成一个随机数x,然后选择第x个排列。下次,您将生成另一个随机数y,并选择yth排列。等等。但是,由于排列的数量多于获得随机数的数量(因为最多在
2**19937-1生成数字之后,您将再次开始获得相同的数量),因此您将再次开始选择相同的排列。
因此,您看到,列表的长度不完全是问题(尽管确实会进入等式)。另外,
2**19937-1是相当长的数字。但是,根据您的洗牌需求,您应该牢记所有这些。在简单的情况下(并具有快速的计算功能),对于没有重复元素的列表,2081个元素将产生
2081!置换,大于
2**19937。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)