您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

使用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

python 2022/1/1 18:38:28 有239人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶