python random.shuffle 的随机性

6 投票
2 回答
4696 浏览
提问于 2025-04-16 00:41

以下内容来自Python官网,讲的是

random.shuffle(x[, random])

这个函数会把序列 x 进行原地打乱,也就是说它会直接改变 x 的顺序。可选的参数 random 是一个不带参数的函数,它会返回一个在 [0.0, 1.0) 范围内的随机小数;默认情况下,这个函数就是 random()

需要注意的是,对于即使是比较小的 len(x)x 的所有可能排列组合的总数都比大多数随机数生成器的周期还要大;这意味着对于一个较长的序列,大部分的排列组合是无法生成的。

如果我想多次获取 ['a'..'k'] 的随机排列,似乎使用 shuffle 并不能保证每次都得到不同的随机结果。我这样理解对吗?

谢谢!

2 个回答

6

对于一个长度为11的序列,有11!(也就是11的阶乘)或者说39,916,800种可能的排列方式。这大约等于2的25.3次方。对于梅森旋转算法(Python中的随机算法),它的周期是2的19937次方减去1。换句话说,你完全不用担心这个问题。

6

你不用担心什么。 当你要打乱的列表长度小于2000时,random.shuffle 这个功能应该可以正常使用。

撰写回答