我想为测试目的创建一个随机整数列表。数字的分布不重要,唯一重要的是时间。我知道生成随机数字是一项耗时的任务,但一定有更好的方法。
这是我的当前解决方案:
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
gnibbler的: 0.0058455221653
KennyTM的: 0.00219276118279
NumPy已经来了,看到了,并且征服了。
random.sample()
会消耗种群,使数字变得越来越不随机。一旦整个种群被消耗完,就无法进一步进行采样。 - Ignacio Vazquez-Abrams