2017-06-12 137 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]