Reputation: 23
Say I have some random numbers 0-9. I want to find a way to get the values 0-9, but I do not want to have a repeat of another number until all the other values have been used an equal number of times.
Ex. 4, 6, 5, 3, 0, 1, 9, 2, 7, 8, (rand number because I used every other number once)
Is there any efficient way to do this?
Upvotes: 2
Views: 125
Reputation: 298364
Repeatedly shuffle the range of numbers you want and concatenate them:
import random
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
result = []
for i in range(100):
random.shuffle(numbers)
result.extend(numbers)
print(result)
Or:
import random
import itertools
def generate_numbers():
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
while True:
random.shuffle(numbers)
yield from numbers
print(list(itertools.islice(generate_numbers(), 50)))
Upvotes: 4