Reputation: 940
I am trying to generate 4 random integers between 0-9. I can easily achieve this using a for-loop:
digits = [random.randrange(10) for i in range(4)]
Assuming it is possible, I was wondering about other ways to yield the same result, perhaps without directly using a for-loop. I was experimenting with itertools and this didn't work:
digits = itertools.repeat(random.randrange(10), 4)
The main purpose of my question is to expose myself to additional methods. Thanks.
Upvotes: 8
Views: 4923
Reputation: 9257
What about using a generator and a while loop
?
from random import randrange
def rand(val, repeat=4):
j = 1
while j <= repeat:
yield randrange(val)
j += 1
final = list(rand(10))
Output:
[2, 6, 8, 8]
Also, using a recursion
:
from random import randrange
def rand(val, repeat=4, b=1, temp=[]):
if b < repeat:
temp.append(randrange(val))
return rand(val, b= b+1, temp=temp)
else:
return temp + [randrange(val)]
final = rand(10)
print(final)
Output:
[1, 9, 3, 1]
Upvotes: 1
Reputation: 32484
This is not really something that I would do, but since you would like to expose yourself to additional methods, then taking advantage of the 0-9 range you can also obtain 4 such integers as follows:
map(int, "%04d"%random.randrange(10**4))
It actually generates a four digit string, and extracts the digits from it.
Upvotes: 0
Reputation: 2909
numpy.random.randint(0, 10, size=4)
or to use itertools
list(map(random.randrange, itertools.repeat(10, 4)))
or even
list(map(random.randrange, [10]*4))
Upvotes: 14