在Python中的列表中进行分层搜索

时间:2016-11-21 12:15:20

标签: python list search

我想在Python中的列表中搜索特定值(整数),其中List可能具有层次结构,因此在特定索引上可能存在列表(例如[1,2,[[3, 4],[5,6]]这里索引2是一个自己的列表,并且可以再次列出一个列表,等等,或者原始列表的索引本身可以有整数值(例如[1,2] ,3,[4,5]]在这种情况下,索引0是一个整数..

最终,我希望搜索值的索引与原始List相同,否则如果搜索的值不在列表中,它应该给我-1 ...我正在使用递归,但我没有期望的结果......

这是我的代码

def search_in_list(L,c1):
    index=-1
    for i in range(len(L)):
        if type(L[i])==list:
            search_in_list(L[i],c1)
        elif type(L[i])!=list:
            if c1==L[i]:
                index=i
    return index

这里有一个例子List [1,2,[[3,4],[5,6]]所以让我说我想搜索6,然后它应该给我2因为那是原始列表的索引6存在,但我有-1而不是......

有人可以挖掘我的代码并告诉我问题和解决方案...... 在此先感谢

1 个答案:

答案 0 :(得分:4)

您可以进行一些修改以正常工作:

def search_in_list(l, needle):
    for i, item in enumerate(l):
        if type(item) == list:
            # We found it, return current index
            if search_in_list(item, needle) >= 0: 
              return i
        else:
            if needle == item:
                return i
    return -1

它不起作用的主要原因是递归调用。当它返回找到该项时(通过返回非负索引),您没有返回当前索引。