我一直在努力尝试一些在线学习。
我需要使用递归创建一个空列表的列表。
奇怪的是,我以为我了解阶乘算法(有很多帮助),但对此却一无所知,因此它总是只返回单个[]。
例如,如果condition = "input.arm == 'mpg_group' || input.arm = 'disp_group'"
,那么我期望n=4
[[ ], [ ], [ ] ,[ ]]
答案 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
方法在list
和return
的{{1}}的末尾添加元素,请考虑以下示例:
None
您可能会看到x = [1,2,3]
y = x.append(4)
print(y) #None
print(x) #[1, 2, 3, 4]
方法更改了append
列表,并且x
是y
,而不是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)
输出:
[[], [], [], []]