我正在尝试使用Python 2.7解决Hackerrank上的dependency hell问题。
我已经形成了一个列出所有依赖项的字典。这就是字典的样子:
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)。
我尝试创建一个给定索引的递归函数,列出需要安装的所有SW,以便安装预期的SW。我此刻并不担心订单。这是功能:
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]
我做错了什么?
答案 0 :(得分:1)
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