我正在尝试编写一个递归函数,它接受数字 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
。
最佳答案
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']
关于python - 如何仅给出长度递归地构建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58584281/