在嵌套列表中查找元素,但是我们不知道该列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在嵌套列表中查找元素,但是我们不知道该列表相关的知识,希望对你有一定的参考价值。

正如我在标题中提到的,我们如何在嵌套列表中找到元素,但用户创建列表。例如:

[’t’,[’q’,[’d’,1],[’p’,7],[’e’,[’i’,1],[’r’,5]]],[’i’,[’o’,5],[’y’,3],[’f’,8]]]

我想找到3的索引。

答案

如果我正确理解了您的问题,那么解决此问题的一种方法是使用回溯。您可以递归地搜索嵌套列表中的元素,同时保持对索引的跟踪。找到元素后,您将从函数中返回。这是该方法的代码

_list1 = [
    't',
    [
        'q',
        ['d',1],
        ['p',7],
        [
            'e',
            ['i',1],
            ['r',5]
        ]
    ],
    [
        'i',
        ['o',5],
        ['y',3],
        ['f',8]
    ]
]
_list2 = [
    1,
    2,
    't',
    ['y',3]
]

def find_ind_rec(current_list, indexes, search_key):
    for index,element in enumerate(current_list): # Iterate through the list
        if element == search_key: # If element equals to the search_key, return True
            indexes.append(index) # Add current index
            return True
        elif isinstance(element,list): # If element is another list (nested list), recursively search for search_key
            indexes.append(index) # Add current index
            if find_ind_rec(element,indexes,search_key): # If search_key found in this nested list, return true
                return True
            # Otherwise, backtrack!
            indexes.pop()
    return False # If search_key not found, return False

indexes = [] # Initially empty
find_ind_rec(_list1,indexes,['y',3]) # Search ['y',3] in example _list1
print(indexes)
indexes = [] # Initially empty
find_ind_rec(_list1,indexes,['i',1]) # Search ['i',1] in example _list1
print(indexes)
indexes = [] # Initially empty
find_ind_rec(_list2,indexes,3) # Search 3 in example _list2
print(indexes)
indexes = [] # Initially empty
find_ind_rec(_list2,indexes,5) # Search 5 in example _list2 --> Not found
print(indexes)

输出

[2, 2]
[1, 3, 1]
[3, 1]
[]

以上是关于在嵌套列表中查找元素,但是我们不知道该列表的主要内容,如果未能解决你的问题,请参考以下文章

二分查找

Python:嵌套列表中元素的索引列表

查找两个嵌套列表的交集?

在算法复杂度比线性更好的列表中查找第一个偶数

在c#中使用lambda获取嵌套列表中的特定元素

如何巢发电机