使用Python random.shuffle随机播放的列表的最大长度?

使用Python random.shuffle随机播放的列表的最大长度?,第1张

使用Python random.shuffle随机播放的列表的最大长度?

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5652821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存