【问题标题】:How can I generate n random numbers without a for loop如何在没有 for 循环的情况下生成 n 个随机数
【发布时间】: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

标签: python random itertools


【解决方案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))
    

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

    【讨论】:

    • 绝对是非常规但有趣的方法!
    猜你喜欢
    • 1970-01-01
    • 2014-06-04
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多