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

Posted

技术标签:

【中文标题】如何在没有 for 循环的情况下生成 n 个随机数【英文标题】:How can I generate n random numbers without a for loop 【发布时间】:2017-06-12 07:20:40 【问题描述】:

我正在尝试生成 4 个介于 0-9 之间的随机整数。 我可以很容易地实现这个使用一个for循环:

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

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

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

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

【问题讨论】:

在 Python 3.6 中 - 还有 random.choices 【参考方案1】:
numpy.random.randint(0, 10, size=4)

或使用 itertools

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

甚至

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

【讨论】:

你不需要itertoolslist(map(random.randrange, [10]*4))【参考方案2】:

使用生成器和 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]

【讨论】:

【参考方案3】:

这不是我真正会做的事情,但是由于您想将自己暴露于其他方法,那么利用 0-9 范围您还可以获得 4 个这样的整数,如下所示:

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

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

【讨论】:

绝对是非常规但有趣的方法!

以上是关于如何在没有 for 循环的情况下生成 n 个随机数的主要内容,如果未能解决你的问题,请参考以下文章

java中的随机循环怎么做?

JAVA如何产生多个随机数

生成n组随机数而没有循环[重复]

如何在没有for循环的情况下引用数组的多个索引值?

JavaScript复习

是否可以在没有迭代器变量的情况下实现 Python for range 循环?