Create random list of integers in Python

后端 未结 4 806
温柔的废话
温柔的废话 2020-11-29 20:17

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

4条回答
  •  悲哀的现实
    2020-11-29 20:40

    Firstly, you should use randrange(0,1000) or randint(0,999), not randint(0,1000). The upper limit of randint is inclusive.

    For efficiently, randint is simply a wrapper of randrange which calls random, so you should just use random. Also, use xrange as the argument to sample, not range.

    You could use

    [a for a in sample(xrange(1000),1000) for _ in range(10000/1000)]
    

    to generate 10,000 numbers in the range using sample 10 times.

    (Of course this won't beat NumPy.)

    $ python2.7 -m timeit -s 'from random import randrange' '[randrange(1000) for _ in xrange(10000)]'
    10 loops, best of 3: 26.1 msec per loop
    
    $ python2.7 -m timeit -s 'from random import sample' '[a%1000 for a in sample(xrange(10000),10000)]'
    100 loops, best of 3: 18.4 msec per loop
    
    $ python2.7 -m timeit -s 'from random import random' '[int(1000*random()) for _ in xrange(10000)]' 
    100 loops, best of 3: 9.24 msec per loop
    
    $ python2.7 -m timeit -s 'from random import sample' '[a for a in sample(xrange(1000),1000) for _ in range(10000/1000)]'
    100 loops, best of 3: 3.79 msec per loop
    
    $ python2.7 -m timeit -s 'from random import shuffle
    > def samplefull(x):
    >   a = range(x)
    >   shuffle(a)
    >   return a' '[a for a in samplefull(1000) for _ in xrange(10000/1000)]'
    100 loops, best of 3: 3.16 msec per loop
    
    $ python2.7 -m timeit -s 'from numpy.random import randint' 'randint(1000, size=10000)'
    1000 loops, best of 3: 363 usec per loop
    

    But since you don't care about the distribution of numbers, why not just use:

    range(1000)*(10000/1000)
    

    ?

提交回复
热议问题