如何在没有 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))
【讨论】:
你不需要itertools
:list(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 个随机数的主要内容,如果未能解决你的问题,请参考以下文章