当前位置: 首页 > 面试题库 >

在Python中创建随机整数列表

胡鸿远
2023-03-14
问题内容

我想创建一个随机的整数列表以进行测试。数字的分布并不重要。唯一要数的是 时间 。我知道生成随机数是一项耗时的任务,但是必须有更好的方法。

这是我当前的解决方案:

import random
import timeit

# Random lists from [0-999] interval
print [random.randint(0, 1000) for r in xrange(10)] # v1
print [random.choice([i for i in xrange(1000)]) for r in xrange(10)] # v2

# Measurement:
t1 = timeit.Timer('[random.randint(0, 1000) for r in xrange(10000)]', 'import random') # v1
t2 = timeit.Timer('random.sample(range(1000), 10000)', 'import random') # v2

print t1.timeit(1000)/1000
print t2.timeit(1000)/1000

v2比v1快,但无法大规模使用。它给出以下错误:

ValueError:样本大于总体

是否有一个快速,有效的解决方案能够在这种规模上工作?

答案的一些结果

安德鲁的:0.000290962934494

咬人:0.0058455221653

肯尼TM:0.00219276118279

NumPy来了,看到了,并被征服了。


问题答案:

尚不清楚您想要什么,但我将使用numpy.random.randint:

import numpy.random as nprnd
import timeit

t1 = timeit.Timer('[random.randint(0, 1000) for r in xrange(10000)]', 'import random') # v1

### Change v2 so that it picks numbers in (0, 10000) and thus runs...
t2 = timeit.Timer('random.sample(range(10000), 10000)', 'import random') # v2
t3 = timeit.Timer('nprnd.randint(1000, size=10000)', 'import numpy.random as nprnd') # v3

print t1.timeit(1000)/1000
print t2.timeit(1000)/1000
print t3.timeit(1000)/1000

这在我的机器上给出:

0.0233682730198
0.00781716918945
0.000147947072983

请注意,randint与random.sample有 很大
不同(为了使它能在您的情况下工作,我必须将1000更改为10,000,正如一位评论员指出的那样-如果您确实希望将它们从0更改为1,000,则可以除以10)。

如果您真的不在乎所获得的分布情况,那么您可能不太了解自己的问题或随机数-如果听起来很不礼貌,请您道歉…



 类似资料:
  • 问题内容: 我尝试使用,但一些数字相同。有没有一种方法/模块来创建唯一的随机数列表? 问题答案: 这将返回从0到99范围内选择的10个数字的列表,没有重复。 参考你的特定代码示例,你可能希望一次从文件中读取所有行,然后从内存中的已保存列表中选择随机行。例如: 这样,你只需要在循环之前实际从文件中读取一次即可。与返回文件开头并为每次循环迭代再次调用相比,执行此操作效率更高。

  • 我试图创建一个没有重复的随机数组。 任务是从用户那里获取一个整数数组和最大值,用0到最大值之间的随机数填充数组,并显示没有重复的随机数组,不使用任何其他类,除了随机和扫描仪。 这是一个示例输出: 请输入数组的大小:10 请输入最大值:50 [39,2,17,49,12,19,40,31,42,15] 我需要帮助删除重复的内容。我不确定我所做的是否正确,我是一个初学者,但这是我目前所做的。非常感谢帮

  • 问题内容: 我正在用python创建一个项目,我想创建一个加密安全的随机数,我该怎么做?我已经在线阅读了常规随机生成器生成的数字不是密码安全的信息,并且该函数返回的是我的字符串,而不是数字。 问题答案: 您可以通过将函数应用于所返回的字节来获取随机数列表,如下所示 报价文件, 返回 适合加密使用* 的随机字节字符串。 * 该函数从特定于操作系统的随机性源返回随机字节。尽管返回的数据的确切质量取决于

  • 我如何创建一个懒散的随机数序列? 执行它将引发异常: (线程“main”clojure.lang.arityException中的异常:传递给:USER$random-numbers$fn at clojure.lang.afn.throwarity(afn.java:437)at clojure.lang.afn.invoke(afn.java:39)at clojure.core$iterat

  • 问题内容: 我知道如果我使用, 给了我我想要的东西,但是带有正态分布的元素。但是,如果我只想要随机整数怎么办? 通过提供范围来工作,但不像提供数组那样工作。那么我该如何使用某个范围之间的随机整数呢? 问题答案: 接受第三个参数(),您可以在其中指定输出数组的大小。您可以使用它来创建- Here-创建一个大小为size的输出数组,其中的随机整数元素在之间。 演示- 产生:

  • 问题内容: 我有一个应用程序,该应用程序可以获取制造过程的质量结果,并创建图形以显示不良品的帕累托图,并显示生产量。 为了自动化测试这些统计程序的任务,我希望确定性地能够将记录添加到数据库中,并使质量技术能够进入某些图表并与已知的良好图表进行比较。但是,我也想模拟结果,以便将它们像进入用户整个测试过程一样进入数据库。 我有一个想法是用i好的数字,j的坏数字1,k的坏数字2等填充一个列表,然后以某种