python - Generate 'n' unique random numbers within a range

ID : 10404

viewed : 21

Tags : pythonrandomuniquepython

Top 5 Answer for python - Generate 'n' unique random numbers within a range

vote vote

93

If you just need sampling without replacement:

>>> import random >>> random.sample(range(1, 100), 3) [77, 52, 45] 

random.sample takes a population and a sample size k and returns k random members of the population.

If you have to control for the case where k is larger than len(population), you need to be prepared to catch a ValueError:

>>> try: ...   random.sample(range(1, 2), 3) ... except ValueError: ...   print('Sample size exceeded population size.') ...  Sample size exceeded population size 
vote vote

88

Generate the range of data first and then shuffle it like this

import random data = range(numLow, numHigh) random.shuffle(data) print data 

By doing this way, you will get all the numbers in the particular range but in a random order.

But you can use random.sample to get the number of elements you need, from a range of numbers like this

print random.sample(range(numLow, numHigh), 3) 
vote vote

77

You could add to a set until you reach n:

setOfNumbers = set() while len(setOfNumbers) < n:     setOfNumbers.add(random.randint(numLow, numHigh)) 

Be careful of having a smaller range than will fit in n. It will loop forever, unable to find new numbers to insert up to n

vote vote

68

You could use the random.sample function from the standard library to select k elements from a population:

import random random.sample(range(low, high), n) 

In case of a rather large range of possible numbers, you could use itertools.islice with an infinite random generator:

import itertools import random  def random_gen(low, high):     while True:         yield random.randrange(low, high)  gen = random_gen(1, 100) items = list(itertools.islice(gen, 10))  # Take first 10 random elements 

After the question update it is now clear that you need n distinct (unique) numbers.

import itertools import random  def random_gen(low, high):     while True:         yield random.randrange(low, high)  gen = random_gen(1, 100)  items = set()  # Try to add elem to set until set length is less than 10 for x in itertools.takewhile(lambda x: len(items) < 10, gen):     items.add(x) 
vote vote

50

For an HTTP-based server there is a Python script to find the server version at: http://svn.apache.org/repos/asf/subversion/trunk/tools/client-side/server-version.py

You can get the client version with

`svn --version` 

Top 3 video Explaining python - Generate 'n' unique random numbers within a range

Related QUESTION?