2017-06-12 56 views
6

我想在0-9之間生成4個隨機整數。 我可以很容易地實現這一點使用 for循環:如何生成n個隨機數沒有for循環

digits = [random.randrange(10) for i in range(4)] 

假設這是可能的,我想知道其他的方法來產生相同的結果,也許是不直接使用一個for循環。我用itertools試驗和這次沒工作:

digits = itertools.repeat(random.randrange(10), 4) 

我的問題的主要目的是對自己暴露給其他方法。 謝謝。

+1

在Python 3.6 - 有也是'random.choices' –

回答

9
numpy.random.randint(0, 10, size=4) 

或使用itertools

list(map(random.randrange, itertools.repeat(10, 4))) 

甚至

list(map(random.randrange, [10]*4)) 
+0

你不需要'itertools':'list(map (random.randrange,[10] * 4))' – Leon

0

這是不是真的東西,我會做,但因爲你想給自己暴露給其他方法,然後利用0-9範圍你還可以得到4個這樣的整數如下:

map(int, "%04d"%random.randrange(10**4)) 

它實際上會生成一個四位數的字符串,並從中提取數字。

+0

絕對非傳統,但有趣的方法! – maze88

1

怎麼樣使用發電機和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)) 

輸出:

[2, 6, 8, 8] 

此外,使用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) 

輸出:

[1, 9, 3, 1]