This question already has an answer here:
I know how to generate a random number within a range in Python.
random.randint(numLow, numHigh)
And I know I can put this in a loop to generate n amount of these numbers
for x in range (0, n):
listOfNumbers.append(random.randint(numLow, numHigh))
However, I need to make sure each number in that list is unique. Other than a load of conditional statements is there a straightforward way of generating n number of unique random numbers?
EDIT: The important thing is that each number in the list is different to the others..
So
[12, 5, 6, 1] = good
But
[12, 5, 5, 1] = bad, because the number 5 occurs twice.
You could use
random.sample
function from standard library to select k elements from population:In case of rather large range of possible numbers you could use
itertools.islice
with infinite random generator:UPDATE
So, after question update it is now clear, that you need n distinct (unique) numbers.
If you just need sampling without replacement:
random.sample takes a population and a sample size
k
and returnsk
random members of the population.If you have to control for the case where
k
is larger thanlen(population)
, you need to be prepared to catch aValueError
:Generate the range of data first and then shuffle it like this
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 thisYou could add to a
set
until you reachn
:Be careful of having a smaller range than will fit in
n
. It will loop forever, unable to find new numbers to insert up ton