使用递归的列表清单

时间:2019-03-14 13:40:38

标签: python list recursion

我一直在努力尝试一些在线学习。

我需要使用递归创建一个空列表的列表。

奇怪的是,我以为我了解阶乘算法(有很多帮助),但对此却一无所知,因此它总是只返回单个[]。

例如,如果condition = "input.arm == 'mpg_group' || input.arm = 'disp_group'" ,那么我期望n=4

[[ ], [ ], [ ] ,[ ]]

8 个答案:

答案 0 :(得分:4)

您不使用递归调用的响应,请尝试理解此代码(我尝试使表单与您的表单相似):

def listOfLists(n):
    lists = [[]]
    if n <= 1:
        return lists
    else:
        return lists + listOfLists(n-1)

此书面的“试运行”可以帮助您理解(listOfLists(3)):

Call - listOfLists(3)
 Call - listOfLists(2)
  Call - listOfLists(1)
  Return [[]] # From listOfLists(1)
 Return [[]] + [[]] # From listOfLists(2)
Return [[]] + [[],[]] # From listOfLists(3)

答案 1 :(得分:1)

在其他答案中已经给出了递归函数,我想解释一下为什么您的代码无法按预期工作。 罪魁祸首是那条线:

lists += lists.append([])

应该是:

lists.append([])

或者:

lists = lists+[[]]

请注意,.append方法在listreturn的{​​{1}}的末尾添加元素,请考虑以下示例:

None

您可能会看到x = [1,2,3] y = x.append(4) print(y) #None print(x) #[1, 2, 3, 4] 方法更改了append列表,并且xy,而不是None。尽管如此,即使在描述了修复之后,您的函数也不会是递归函数。

答案 2 :(得分:0)

供您考虑的另一个变体。这将使用带有默认值的附加参数。

def listOfLists(n, lists = []):
    if n > 0:
        lists.append([])
        return listOfLists(n-1, lists)
    else:
        return lists

print(listOfLists(4))

答案 3 :(得分:0)

如果必须使用递归来解决更适合重复的问题,则可以执行此操作。我已尽我所能保持与原件的距离。

def listOfLists(n):
    if n <= 0:
        return []
    else:
        return [ [] ] + listOfLists(n-1)

>>> listOfLists(4)
[[], [], [], []]

答案 4 :(得分:0)

def listOfLists(n,lists=[]):
    lists.append([])
    if n == 1:   
        return

    listOfLists(n-1,lists)
    return lists

print (listOfLists(4))

结果:[[],[],[],[]]

答案 5 :(得分:0)

发布了很多递归答案,但是,也可以使用带有递归的生成器:

def listOfLists(n):
   if n:
     yield []
     yield from listOfLists(n-1)

print(list(listOfLists(4)))

输出:

[[], [], [], []]

答案 6 :(得分:-1)

您可以这样做:

def listoflist_func(n, currentList=[]):
    if n < 0:
        return "Error: n must be > 0"
    elif n==0:
        return currentList
    else:
        currentList.append([])
        return listoflist_func(n-1, currentList)


print listoflist_func(4)

结果是:

[[], [], [], []]

最佳

答案 7 :(得分:-3)

def listOfLists(n):

lists = []

for i in range(0, n):
    if n <= 1:
        return lists
    else:
        lists.append([])
return lists

y= listOfLists(4)
print(y)
  

输出:

[[], [], [], []]