我必须编写一个函数,它返回给定给我们的列表中索引路径的值。
def recursive_index(lst,index_path):
if len (index_path)<1:
return recursive_index(list(index_path),index_path[1:])
else:
return index_path[0]
我应该从这个函数得到的结果是:
recursive_index([1,[2],3], [0])
,
我应该得到1。 但我得到的结果是0而不是1。
答案 0 :(得分:0)
您的函数目前不以任何方式与传递的lst
进行交互。它现在做的是首先检查传递的index_path
是否有多个元素。您当前对index_path
的测试是[0]
,其中没有多个元素。然后,您的函数将使用else
分支并返回index_path
的第一个元素,即0
。
要解决此问题,请在适当的位置参考lst
。
def recursive_index(lst,index_path):
if index_path:
return recursive_index(lst[index_path[0]],index_path[1:])
else:
return lst
如果还有索引要使用,它将使用第一个可用的索引来索引lst
,然后在递归调用中将该值和index_path
的其余部分传递给函数。当没有剩下的索引时,它会返回lst
的剩余部分。
使用[1, [2], 3], [0]
:
[0]
不为空,因此请将其中的第一个元素用作索引。通过其他指数。
[1, [2], 3][0]
是1
,我们通过了。其余的指数是[]
,我们通过了。
[]
为空,因此return
传递的lst
为1
。
>>> recursive_index([1,[2],3], [0])
1
稍微大一点的测试:
>>> recursive_index([1,[2, [1]], 3], [1])
[2, [1]]
>>> recursive_index([1,[2, [1]], 3], [1,0])
2
>>> recursive_index([1,[2, [1]], 3], [1,1])
[1]
>>> recursive_index([1,[2, [1]], 3], [1,1,0])
1