Python如何生成多个不重复的随机数?(10个随机数示例)

2021年3月24日00:56:24 发表评论 6,878 次浏览

Python如何生成多个随机数?下面的Python程序示例:生成10个1到100之间的不重复的随机整数。它在给定的间隔或范围内生成一个随机整数,如果之前没有添加,则将其添加到一个列表中。

>>> import random
>>> list=[]
>>> for i in range(10):
          r=random.randint(1,100)
          if r not in list: list.append(r)

>>> list

以上生成多个随机数的程序输出如下:

[13, 53, 25, 95, 64, 87, 27, 93, 74, 60]

Python生成多个随机数-扩展解释:

“随机”有几种可能的定义。我认为人们所说的“真随机数”是一种定义,即Knuth。在半正式意义上,如果不存在可能的确定性算法来预测序列中的下一个数字小于整个序列,则序列在这种意义上是随机的。根据这个定义,没有任何有限算法可以产生真正的随机数。

只有用硬件设备来提供熵源,才能得到真正的随机数。热噪声(通常通过反向PN结)和衰变发生器是常用的方法。然而,它们往往是缓慢的。热噪声设备往往在音频采样范围内工作,你可能不想靠近产生大量比特的辐射源。

更便宜但更糟糕的获取熵的方法包括查看由其他进程更新的文件,比如系统日志。你也可以使用交互时间来调整它,但这也是很慢的。所以通常你使用伪随机算法,每隔一段时间就重新播种一次。这通常已经足够好了。

注意,“真正的”随机性并不总是可取的。确定性伪随机生成器对于调试来说是可取的,因为你可以重新启动程序并获得相同的序列。这对游戏来说也很有趣。比如说,如果你有一个基于32位伪随机数字生成器的数独游戏,你就可以玩超过40亿个数字游戏,人们可以互相挑战。“嘿,伙计!你打过12366984号了吗?”(可能有一些重复。)

随机的另一个定义与分布有关。通常,你希望在(0,1]范围内的结果是一致的。你可以把它转换成任何你喜欢的发行版。伪随机生成器在这方面做得很好,尽管有些比特比其他比特更随机,而且对于简单的比特,有些模式对规模很敏感。也就是说,你可能每隔5个数字,或每隔13个数字,或别的什么就会看到一个模式。

你可以通过组合多个生成器的结果,比如全等和移位寄存器算法,获得相当好的结果。真正的随机数生成器,如热噪声,在这方面往往很差。此外,它们往往像天线一样工作,所以当空调打开时,你可能会得到不同的结果。因此,理想情况下,它们应该与确定性伪随机生成器的结果相结合,以获得良好的分布。

以上就是Python如何生成多个随机数?和Python生成多个不重复的随机数的解决代码和详细解释。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: