Python中随机播放的随机性

时间:2016-05-05 02:34:28

标签: random-sample

我指的是Python随机模块'洗牌功能。

from random import shuffle

list = [1, 2, 3, 4]

shuffle(list)

我猜想上面的函数使用随机种子。我知道在C中,rand函数迭代计算机中的几个随机种子数。因此,当循环遍历函数时,随机函数不再变得随机。

shuffle函数的工作方式与C中的rand函数类似吗?如果是这样,我如何添加随机的种子? (我正在考虑以毫秒为单位使用时间来提出独特的价值)。

此前发布了有关此问题的已接受答案的评论但无法得到任何回复(Shuffling a list of objects in python

编辑:

我想确保随机shuffle不会在循环中重复其shuffling方法。例如,

我想洗牌[1,2,3,4,5,6]

我循环了10000次。

它产生以下结果: [1,3,2,4,5,6] [2,1,4,5,3,6] ......(大量不同的洗牌组合) [1,3,2,4,5,6] [2,1,4,5,3,6] ......(重复模式)。

我想避免上述行为,因为我正在循环一大堆。以上行为会首先发生吗?如果是这样,我是否必须在一定数量的循环后更改种子?

2 个答案:

答案 0 :(得分:3)

  

我知道在C中,rand函数会迭代计算机中的几个随机种子数。

不,不。它使用您使用srand设置的任何种子,如果您未调用srand,则使用1。

  

shuffle函数的工作方式与C中的rand函数类似吗?如果是这样,我如何添加随机的种子? (我正在考虑以毫秒为单位使用时间来提出独特的价值)。

Python's random module uses either system time or OS-provided randomness sources to seed the RNG

random.seed([x])
     

初始化基本随机数生成器。可选参数 x 可以   是任何可清洗的对象。如果省略 x None,则为当前系统时间   用来; 当前系统时间也用于初始化生成器   首次导入模块时。如果提供随机源   通过操作系统,它们被用来代替系统时间(见   有关可用性的详细信息,请os.urandom()

     

在版本2.4中更改:以前,操作系统资源不是   使用

答案 1 :(得分:2)

  

几乎所有模块函数都依赖于random()的基本函数   在半开放范围[0.0,1.0]内均匀生成随机浮点数。   Python使用Mersenne Twister作为核心生成器。它产生   53位精度浮点数,周期为2 ** 19937-1。潜在的   C中的实现既快又线程安全。 Mersenne Twister   是最广泛测试的随机数发生器之一   存在。但是,完全确定性,它是不合适的   出于所有目的,并且完全不适合加密   目的。

     

随机模块还提供了使用的SystemRandom类   系统函数os.urandom()从源生成随机数   由操作系统提供。

     

警告不应使用此模块的伪随机生成器   出于安全目的。如果需要,请使用os.urandom()或SystemRandom   加密安全的伪随机数生成器。