如何在Python的索引路径中编写一个返回嵌套列表中的值的函数?

时间:2015-10-15 10:52:38

标签: python recursion

我必须编写一个函数,它返回给定给我们的列表中索引路径的值。

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。

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传递的lst1

>>> 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