如何在 Python 3 中生成 0 到无穷大之间的 N 个随机数

新手上路,请多包涵

如何在 python 3 中生成 n 个随机数? n为待定变量。最好是自然数(整数 > 0),我发现的所有答案都采用一个范围内的随机整数,但是我不想从一个范围内生成数字。 (除非范围是 0 到无穷大)

原文由 Billy Cole 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 931
2 个回答

套用维特根斯坦的话,你的机器的极限就是你的语言的极限。即在计算机/计算世界中没有无限这样的东西。您可以使用 sys.maxsize (Python 2 中的 sys.maxint )获取机器支持的最大正整数,并将其传递给 random.randint 函数:212

 >>> import sys
>>> sys.maxsize
9223372036854775807
>>> random.randint(0,sys.maxsize)
7512061515276834201

为了生成多个随机数,您可以使用如下列表推导式:

 >>> N = 10
>>> [random.randint(0,sys.maxsize) for _ in range(N)]
[3275729488497352533, 7487884953907275260, 36555221619119354, 1813061054215861082, 619640952660975257, 9041692448390670491, 5863449945569266108, 8061742194513906273, 1435436865777681895, 8761466112930659544]

有关 sys.maxintsys.maxsizepython 2.X 和 3.X 中的区别的更多信息:

sys.maxint 常量被移除,因为整数的值不再有限制。但是, sys.maxsize 可以用作大于任何实际列表或字符串索引的整数。它符合实现的“自然”整数大小,并且通常与同一平台上先前版本中的 sys.maxint 相同(假设构建选项相同)。

原文由 Mazdak 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为您可能需要重新考虑您要使用所需的随机数做什么。特别是,您从什么分布中抽取数字?如果您希望随机数均匀分布(每个数字被选中的概率均等),则不能:您需要无限量的内存(或时间,或两者)。

当然,如果您允许非均匀分布,这里有一些介于 1 和(大致)最大的随机数 float 我的系统允许,但由于这些数字的表示方式存在差距。而且您可能会觉得选择“大”数字的概率比您希望的要快得多……

 In [254]: [int(1./random.random()) for i in range(10)]
Out[254]: [1, 1, 2, 1, 1, 117, 1, 3, 2, 6]

原文由 xnx 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题