Alex Rivera | Logout

Create random list of integers in Python

Asked 2010-11-13T10:52:21.203
74

I'd like to create a random list of integers for testing purposes. The distribution of the numbers is not important. The only thing that is counting is time. I know generating random numbers is a time-consuming task, but there must be a better way.

Here's my current solution:

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 is faster than v1, but it is not working on such a large scale. It gives the following error:

ValueError: sample larger than population

Is there a fast, efficient solution that works at that scale?

Some results from the answer

Andrew's: 0.000290962934494

gnibbler's: 0.0058455221653

KennyTM's: 0.00219276118279

NumPy came, saw, and conquered.

Edit
Report

1 Answer

6

Your question about performance is moot—both functions are very fast. The speed of your code will be determined by what you do with the random numbers.

However it's important you understand the difference in behaviour of those two functions. One does random sampling with replacement, the other does random sampling without replacement.

answered 2013-05-27T11:21:05.467

Your Answer