提问人:Dr.jj 提问时间:12/10/2022 最后编辑:ggorlenDr.jj 更新时间:12/11/2022 访问量:154
嵌套列表的递归函数
Recursive function to nested lists
问:
我试图创建一个递归函数,该函数获取一个数字并根据索引返回嵌套列表列表。例如,对于 0,该函数返回一个空列表。对于 1,函数返回 。对于 3,函数返回 ,依此类推。[]
[[], [[]]]
[ [] , [ [] ] , [ [] , [ [] ] ]]
def func(n):
if n == 0:
return []
return [func(n-1)]
对于这个问题,我尝试了许多不同的方法。我无法弄清楚如何根据任务将输出扩展到嵌套列表。
答:
1赞
Timmy Diehl
12/11/2022
#1
我认为你要找的是这样的:
def f(n):
L = []
for i in range(n):
L.append(f(i))
return L
我的困惑源于你的例子。对于 ,有 0 个元素,对于有 3 个元素,但 有 2 个元素。这应该适用于最终列表中的元素数n=0
n=3
n=1
n
评论
0赞
DonLarry
12/11/2022
我认为这个答案是正确的,并且做了提问者显然想做的事情,但作为对提问者的建议,我也会在其中添加记忆以避免大量不必要的计算(如果你愿意,我可以编辑和添加带有记忆的版本)
1赞
chepner
12/11/2022
#2
每个列表实际上包含前面的所有列表,而不仅仅是前面的列表。(根据您的示例,您的问题似乎错误地将返回的列表称为 返回的列表。func(3)
func(2)
func(1)
func(0) == []
func(1) == [func(0)] == [[]]
func(2) == [func(0), func(1)] == [[], [[]]]
func(3) == [func(0), func(1), func(2)] == [[] , [[]] , [[], [[]]]]
...
func(n) == [func(0), func(1), ..., func(n-1)]
这基本上是自然数的集合论定义,这要归功于冯·诺依曼。零被定义为空集合,每个数字的后继者是 和 的并集,包含:x
x
x
0 == {}
1 == 0 | {0} == {} | {{}} == {{}}
2 == 1 | {1} == {{}} | {{{}}} == {{}, {{}}}
我把它作为一个练习,使用列表而不是集合来实现这一点。
评论
n=0