如何在没有for循环的情况下生成n个随机数

时间:2017-06-12 07:20:40

标签: python random itertools

我试图在0-9之间生成4个随机整数。 我可以轻松实现使用一个for循环:

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

假设有可能,我想知道其他方法产生相同的结果,也许没有直接使用for循环。我正在尝试使用itertools和这没有工作:

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

我的问题的主要目的是让自己接触其他方法。 感谢。

3 个答案:

答案 0 :(得分:9)

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

或使用itertools

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

甚至

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

答案 1 :(得分: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]

答案 2 :(得分:0)

这不是我真正要做的事情,但是既然你想让自己暴露于其他方法,那么利用0-9范围,你也可以获得4个这样的整数:

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

它实际上会生成一个四位数的字符串,并从中提取数字。