如何在没有 for 循环的情况下生成 n 个随机数
How can I generate n random numbers without a for loop
我正在尝试生成 4 个介于 0-9 之间的随机整数。
我可以很容易地实现这个 使用 一个 for-loop:
digits = [random.randrange(10) for i in range(4)]
假设这是可能的,我想知道是否有其他方法可以产生相同的结果,也许不直接使用 for 循环。我正在试验 itertools,这没有 工作:
digits = itertools.repeat(random.randrange(10), 4)
我的问题的主要目的是让自己接触其他方法。
谢谢
numpy.random.randint(0, 10, size=4)
或使用 itertools
list(map(random.randrange, itertools.repeat(10, 4)))
甚至
list(map(random.randrange, [10]*4))
这不是我真正会做的事情,但既然你想接触更多的方法,那么利用 0-9 范围你也可以获得 4 个这样的整数,如下所示:
map(int, "%04d"%random.randrange(10**4))
它实际上生成一个四位数的字符串,并从中提取数字。
使用生成器和 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]
我正在尝试生成 4 个介于 0-9 之间的随机整数。 我可以很容易地实现这个 使用 一个 for-loop:
digits = [random.randrange(10) for i in range(4)]
假设这是可能的,我想知道是否有其他方法可以产生相同的结果,也许不直接使用 for 循环。我正在试验 itertools,这没有 工作:
digits = itertools.repeat(random.randrange(10), 4)
我的问题的主要目的是让自己接触其他方法。 谢谢
numpy.random.randint(0, 10, size=4)
或使用 itertools
list(map(random.randrange, itertools.repeat(10, 4)))
甚至
list(map(random.randrange, [10]*4))
这不是我真正会做的事情,但既然你想接触更多的方法,那么利用 0-9 范围你也可以获得 4 个这样的整数,如下所示:
map(int, "%04d"%random.randrange(10**4))
它实际上生成一个四位数的字符串,并从中提取数字。
使用生成器和 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]