首页 > 解决方案 > 在嵌套列表中查找索引

问题描述

我正在尝试创建一个函数,它将一个嵌套列表和一个项目作为输入,并返回一个索引列表。例如list = [0, 5, [6, 8, [7, 3, 6]], 9, 10]and item = 7应该返回[2, 2, 0],因为list[2][2][0] = 7

我的代码应该可以工作,因为我可以打印欲望输出,但是当我运行它时它返回无。

def find_item(list_input, item, current):
    if list_input == item:
        print(current) ## this does give the desires output, but the function should return not print
        return current
    else:
        if isinstance(list_input, list):
            for j in range(len(list_input)):
                current.append(j)
                find_item(list_input[j], item, current)
                del current[-1]

我在这里俯瞰什么?

标签: pythonpython-3.xrecursionnested-lists

解决方案


当有人在递归函数for中间插入一个循环时,我总是很困扰!这是解决此问题的另一种方法:

def find_item(list_input, item, index=0):
    if list_input:
        head, *tail = list_input

        if head == item:
            return [index]

        if isinstance(head, list):
            if result := find_item(head, item):
                return [index] + result

        return find_item(tail, item, index + 1)
    
    return list_input

list_input  = [0, 5, [6, 8, [7, 3, 1]], 9, 10]

print(find_item(list_input, 7))

此解决方案不需要明确的第三个参数。list并在找不到项目时返回空,而不是None. 注意新海象运算符的使用:=

            if result := find_item(head, item):

如果这是一个问题,请改为:

            result = find_item(head, item)
            if result:

推荐阅读