Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I generate n random numbers without a for loop

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.

like image 219
maze88 Avatar asked Jun 12 '17 07:06

maze88


2 Answers

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))
like image 159
codelessbugging Avatar answered Oct 18 '22 11:10

codelessbugging


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]
like image 35
Chiheb Nexus Avatar answered Oct 18 '22 13:10

Chiheb Nexus