python random.shuffle的随机性
以下来自python网站,大约
random.shuffle(x[, random])
将序列
x
打乱到位。可选参数 random 是一个 0 参数函数,返回[0.0, 1.0)
中的随机浮点数;默认情况下,这是函数random()
。请注意,即使对于相当小的
len(x)
,x
的排列总数也大于大多数随机数生成器的周期;这意味着长序列的大多数排列永远无法生成。
如果我想重复获得 ['a'..'k']
的随机排列,似乎 shuffle 不会给我随机性。我的理解对吗?
谢谢你!
Following is from python website, about
random.shuffle(x[, random])
Shuffle the sequence
x
in place. The optional argument random is a 0-argument function returning a random float in[0.0, 1.0)
; by default, this is the functionrandom()
.Note that for even rather small
len(x)
, the total number of permutations ofx
is larger than the period of most random number generators; this implies that most permutations of a long sequence can never be generated.
If I want to repeat getting a random permutation of ['a'..'k']
, it seems shuffle will NOT give me the randomness. Is my understanding right?
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于长度为 11 的序列,有 11 个!或 39,916,800 (~ 225.3) 种可能的排列。对于 Mersienne Twister(Python 的随机算法),周期为 219937 − 1. 换句话说,你会没事的。
For a sequence of length 11, there are 11! or 39,916,800 (~ 225.3) possible permutations. For the Mersienne Twister (Python's random algorithm) the period is 219937 − 1. In other words, you'll be fine.
您无需担心。 虽然
len(x)
低于 2000,但random.shuffle
应该可以正常工作。You don't have anything to worry about. While under
len(x)
is under 2000,random.shuffle
should work just fine.