如何仅递归指定长度来递归构建列表?

时间:2019-10-27 23:35:29

标签: python list recursion

我正在尝试编写一个采用数字n和某个值(例如'a')的递归函数,并以递归方式构建一个由n 'a'组成的列表。

因此,func(4, 'a')返回['a','a','a','a']

到目前为止,我的互联网搜索令人惊讶地徒劳。我发现的大多数列表递归示例都带有附加参数。

我尝试了以下代码的各种版本:

def func(n, a):
    if n == 1:
        return [a]
    else:
        return func(n-1, a).append(a)

在最后一次返回时,我不断遇到cannot append to NoneType错误。因此func(n-1,a)返回None

3 个答案:

答案 0 :(得分:2)

list.append仅返回None,因为其目的是就地更新目标列表。无需添加,只需添加:

def func(n, a):
   if n == 1:
      return [a]
   else:
      return func(n-1, a) + [a]

print(func(4, 'a'))

输出:

['a', 'a', 'a', 'a']

另外,您可能要考虑使用生成器来提供更清晰(或更短)的结果:

def func(n, a):
  if n:
    yield a
    yield from func(n-1, a)

print(list(func(4, 'a')))

输出:

['a', 'a', 'a', 'a']

答案 1 :(得分:0)

它必须是递归的吗?

def func(n,a):     a_list = []     对于我在范围(n)中:         a_list.append(str(a))     返回a_list

答案 2 :(得分:0)

由于list.append方法返回None,因此,如果要使用append方法,则必须这样做:

def func(n, a):
    if n == 1:
        return [a]
    else:
        temp = func(n-1, a)
        temp.append(a)
        return temp

print(func(5, 'a'))

打印:

['a', 'a', 'a', 'a', 'a']