3 回答
TA贡献1790条经验 获得超9个赞
你的逻辑是错误的。您需要每个函数调用都返回n随机整数,因此您不需要将其传递到列表中。
每个函数在范围内生成一个随机数,[0, valmax]并将其连接到整数的随机列表,该列表的长度减一 ( n-1),它是通过递归调用自身获得的。
基本情况是 when n == 1,在这种情况下我们返回一个空列表。
import random
def random_list(n, valmax):
if n == 0:
return []
return [random.randint(0, valmax)] + random_list(n-1, valmax)
和一个测试:
random_list(10, 20)
#[20, 9, 4, 7, 3, 4, 3, 18, 19, 9]
TA贡献1862条经验 获得超6个赞
不要保留默认参数(这也可能导致连续调用出现意外行为),而是使用yield更清洁的解决方案。此外,只需用于random.randint(0, valmax)在0和之间生成单个随机整数valmax:
import random
def random_list(n, valmax):
if n:
yield random.randint(0, valmax)
yield from random_list(n-1, valmax)
print(list(random_list(10, 10))) #create a list of length ten with random values between 0 and 10, inclusive.
输出:
[4, 6, 9, 1, 10, 2, 2, 8, 2, 10]
TA贡献2019条经验 获得超9个赞
你可以写一个通用build_list函数 -
import random
def identity (x):
return x
def build_list (size, proc = identity):
if size == 0:
return []
else:
return build_list (size - 1, proc) + [ proc (size - 1) ]
print (build_list (5))
# [ 0, 1, 2, 3, 4 ]
print (build_list (5, lambda _: random.randint (0, 10)))
# [ 4, 7, 7, 3, 6 ]
random_list可能是一个专业build_list——
def random_list (size, valmax):
return build_list (size, lambda _: random.randint (0, valmax))
print (random_list (5, 10))
# [ 1, 7, 4, 7, 0 ]
添加回答
举报