由于某些原因,此代码中的x未在递归中更新。不应该更新,因为我在(y)中调用b(c)?当x在b(c)中更新但未返回
时global nested
def extract(nested,depth):
y = depth[0]
depth = depth[1:]
extract = nested[y]
newlist(extract)
return depth
def newlist(x):
nested = x
return nested
def recursiveRef(nested,depth):
"""Return element from nested list
list ->int
"""
if len(depth) == 0:
return nested
else:
return recursiveRef(nested,extract(nested,depth))
答案 0 :(得分:3)
这是你想要做的吗?
def recursiveRef(nested,depth):
"""Return element from nested list
list ->int
"""
if len(depth) == 0:
return nested
else:
return recursiveRef(nested[depth[0]],depth[1:])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1,1])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1,1,1])
[4, [5, 6], 7]
[5, 6]
6
答案 1 :(得分:1)
我不是Python
主人,但我认为问题是x
是递归函数的本地。您正在更改x
中的其他全局b(c)
。如果我错了,请纠正我。
答案 2 :(得分:1)
您的代码看起来很可疑。当您认为自己想要一个全局变量时,通常需要一个类。考虑将函数包装在类中,并使用self.x而不是x。
那就是说,“全球”不应该写在程序的顶部。相反,您需要在修改全局变量的每个函数中使用它,而不是只读取它的那些函数。
def newlist(x):
global nested
nested = x
return nested
答案 3 :(得分:0)
x
函数中的b
变量未绑定到recursion
函数中的变量。
我真的不明白你要做什么 - 我可能错了,但我建议你考虑把两个函数a
和b
放到recursion
中,创建关闭。
通过这种方式,嵌套函数可以查看和修改外部作用域中定义的所有变量。
答案 4 :(得分:0)
更简单的非递归版本:
def inTree(tree, ref):
for offs in ref:
tree = tree[offs]
return tree