我正在尝试解决 dependency hell使用 Python 2.7 的 Hackerrank 问题。
我已经形成了一个字典,其中列出了所有依赖项。这就是字典的样子:
d = {1: [1, 8], 2: [0], 3: [1, 7], 4: [1, 7], 5: [1, 2], 6: [1, 2], 7: [0], 8: [2, 3, 4]}
每个列表中的第一个数字就是该列表中元素的数量。接下来的数字是依赖项的索引。每个数字都是软件的索引(即软件#1)。
我尝试创建一个递归函数,给定一个索引,它将列出要安装的预期软件所需安装的所有软件。我现在不担心订单。这是函数:
def listSW(p,d,L):
L.append(p)
if d[p][0] > 0:
for i in xrange(1,d[p][0]+1):
return listSW(d[p][i],d,L)
else:
return L
其中L
是一个列表(最初为空),我在其中转储需要安装的所有内容的索引,p
是我们打算安装的软件。
问题是在for
循环中只考虑i = 1
。因此,如果我运行 p = 8
的函数,我会得到:
[8, 3, 7]
当我想要得到:
[8, 3, 7, 4, 7]
我做错了什么?
最佳答案
def listSW(p,d,L):
L.append(p)
if d[p][0] > 0:
for i in xrange(1,d[p][0]+1):
listSW(d[p][i],d,L)
return L
但我不喜欢混合返回和更新列表,所以我会这样做:
def buildList(p,d,L=[]):
def patchList(p,d,L):
L.append(p)
for i in d[p][1:]:
patchList(i,d,L)
patchList(p,d,L)
return L
关于python - For 循环停止在递归函数中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43034302/