http://docs.python.org/2/library/random.html#random.shuffle
random.shuffle(x[, random])
将序列 x 拖放到位。可选参数 random 是一个0参数函数,在[0.0,1.0)中返回一个随机浮点数;通过 默认情况下,这是函数
random()
。请注意,对于相当小的
len(x)
, x 的排列总数大于大多数随机数的周期 发电机;这意味着长序列的大多数排列都可以 永远不会被生成。
有人可以向我解释最后一句话的含义吗?
听起来你可以或应该使用shuffle
对列表大小有限制吗?
答案 0 :(得分:10)
这意味着对于更长的列表,随机数生成器将开始重复自身,因此给定列表的不同可能“随机播放”的数量不会是列表的排列数。
对于长度 N 的列表,有 N!( N 阶乘)可能的方式来置换列表顺序,但如果随机生成器在少于N后开始重复!迭代,然后random.shuffle()
函数将无法为该列表生成所有 N!排列。
它仍然可以随机播放列表,但即使你无限次地对列表进行了混乱,也不会为这样的列表生成所有可能的顺序。
默认random.random()
函数使用Mersenne Twister算法,其周期为2 ** 19937-1。这意味着在您看到此行为发生之前,您需要一个长度为2081的列表。
答案 1 :(得分:1)
如果x是10个项目的序列,则可能有3,628,800个可能的订单,其中可以排列列表..但是大多数随机数生成器(不是真正随机的)将循环通过有限数量的“随机”数字 - 这个有限数字可能小于原始10个元素的3,628,800个可能的排列,因此一些可能的排列永远不会因为改组而出现。
这并不意味着shuffle函数接受的序列大小会有限制。