在Python中创建随机整数列表

发布于 2021-01-29 19:04:15

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

这是我当前的解决方案:

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来了,看到了,并被征服了。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尚不清楚您想要什么,但我将使用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)。

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看