嵌套列表的递归函数

Recursive function to nested lists

提问人:Dr.jj 提问时间:12/10/2022 最后编辑:ggorlenDr.jj 更新时间:12/11/2022 访问量:154

问:

我试图创建一个递归函数,该函数获取一个数字并根据索引返回嵌套列表列表。例如,对于 0,该函数返回一个空列表。对于 1,函数返回 。对于 3,函数返回 ,依此类推。[][[], [[]]][ [] , [ [] ] , [ [] , [ [] ] ]]

def func(n):
    if n == 0:
        return []
    return [func(n-1)]

对于这个问题,我尝试了许多不同的方法。我无法弄清楚如何根据任务将输出扩展到嵌套列表。

Python 递归 嵌套列表

评论

0赞 ggorlen 12/11/2022
非常接近的问题 如何在 python 中制作递归函数,执行以下操作? 魔术清单
0赞 Dr.jj 12/11/2022
@ggorlen 谢谢!但是不允许我导入副本,这使得它更难解决
0赞 ggorlen 12/11/2022
您是否查看了该链接上的所有答案?这并不完全相同,因为你看似奇怪的预期结果,但除此之外,它或多或少是一样的,所以你应该能够调整那里的技术来解决这个问题。n=0
0赞 ggorlen 12/13/2022
还相关: 嵌套列表递归 python 的序列

答:

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=0n=3n=1n

评论

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)]

这基本上是自然数的集合论定义,这要归功于冯·诺依曼。零被定义为空集合,每个数字的后继者是 和 的并集,包含:xxx

0 == {}
1 == 0 | {0} == {} | {{}} == {{}}
2 == 1 | {1} == {{}} | {{{}}} == {{}, {{}}}

我把它作为一个练习,使用列表而不是集合来实现这一点。