Python 这在文件中对于random.shuffle意味着什么?

Python 这在文件中对于random.shuffle意味着什么?,python,random,Python,Random,random.shuffle(x[,random]) 将序列x移动到位。可选参数random是一个0参数函数,在[0.0,1.0]中返回一个随机浮点;通过 默认情况下,这是函数random() 请注意,对于非常小的len(x),x的置换总数大于大多数随机数的周期 生成器;这意味着长序列的大多数排列可以 永远不会生成 有人能给我解释一下最后一句话的意思吗 这听起来像是对列表的大小有一个限制,你可以或应该使用shuffleon?这意味着对于较长的列表,随机数生成器将开始重复自身,因此给定列表的不同可

random.shuffle(x[,random])

将序列x移动到位。可选参数random是一个0参数函数,在[0.0,1.0]中返回一个随机浮点;通过 默认情况下,这是函数
random()

请注意,对于非常小的
len(x)
,x的置换总数大于大多数随机数的周期 生成器;这意味着长序列的大多数排列可以 永远不会生成

有人能给我解释一下最后一句话的意思吗


这听起来像是对列表的大小有一个限制,你可以或应该使用
shuffle
on?

这意味着对于较长的列表,随机数生成器将开始重复自身,因此给定列表的不同可能“shuffle”的数量不会是列表的排列数量

对于长度为N的列表,有N!(N阶乘)可能的排列列表顺序的方法,但如果随机生成器在少于N!次迭代后开始重复自身,则
random.shuffle()
函数将无法为该列表生成所有N!次排列

它仍然能够洗牌列表,但即使您洗牌列表无数次,它也不会为这样的列表生成所有可能的顺序


默认值
random.random()
函数使用Mersenne Twister算法,该算法的周期为2**19937-1。这意味着您需要一个长度为2081的列表,然后才能看到这种行为发生。

如果x是一个由10个项目组成的序列,那么可能会有3628800个可能的顺序,可以按照这些顺序排列列表。但是大多数随机数生成器(并非真正随机)将循环通过有限数量的“随机”数-此有限数可能小于原始10个元素的3628800个可能排列,因此某些可能排列将永远不会出现在洗牌的结果中


这并不意味着洗牌函数所接受的序列的大小会有限制。

它告诉我的是你可以洗牌,但是你不可能通过洗牌来生成每一个排列,仅仅是其中的一个子集。从数学上来说,这或多或少可以这样解释:
让p是所有可能排列的集合列表L{p1,p2,…pn}的s和由shuffle(){s1,s2,…sm}生成的可能置换的数目。那么,对于每足够长的L
,s是P的适当子集。