为了账号安全,请及时绑定邮箱和手机立即绑定

使用递归创建随机元素列表

使用递归创建随机元素列表

青春有我 2021-08-14 21:26:03
我被要求定义一个递归函数,它接受两个参数:nvalmax并返回n从区间中随机选取的数字列表[0 , valmax]`import randomdef random_list(n, valmax, lst = []):    """    parameters : n of type int;                 valmax of type int;    returns    : a list of n numbers picked randomly from the interval                  [0, valmax]    """    if len(lst) == n:             return lst    return [random.randint(0, valmax)] + random_list(n, valmax)print(random_list(10,100))`但是,我得到了一个递归错误如何修复我的代码,使其返回一个包含n随机数的列表[0, valmax]?
查看完整描述

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]


查看完整回答
反对 回复 2021-08-14
?
阿波罗的战车

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]


查看完整回答
反对 回复 2021-08-14
?
慕少森

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 ]


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信