Поиск индекса элемента в списке, вложенный в список

Есть список, с вложенными списками,

list = [
    ['element_1', 3]
    ['element_2', 4]
    ['element_3', 5]
]

Вот задача: Надо найти в каком списке нужный элемент (типо в каком списке находится 'element 2', что-бы на выходе было list[2][1])

.index не работает с вложенными списками, for не возвращает индекс

всё это должно идти с учётом того, что я знаю только нужный мне элемент/стоку/число, ни его индекс, ни его расположения, ни заполнения списка я знать не могу


Ответы (1 шт):

Автор решения: GrAnd

Рекурсия и цикл for c enumerate() вам помогут:

def find_hier_index(struct, what):
    if isinstance(struct, (list, tuple)):    # если на входе список
        for i, el in enumerate(struct):      # то идем поэлементно
            idx = find_hier_index(el, what)  # и проверяем в каждом элементе
            if idx != None:                  # если элемент был найден ниже по иерархии
                return (i,)+idx              # то приписываем к нему индекс на текущем уровне
    elif struct == what:     # если элемент найден
        return tuple()       # то возвращаем пусто, т.к. индекс будет добавлен на предыдущем уровне
    return None              # иначе элемент не список и не соответствует искомому

# тестовые данные
lst = [
    ['el1', 3],
    ['el2', ['el21', 24], 'el22', [ 'el31', 31, 32, 33, ['el41', 'el42'], 35] ],
    ['el3', 5]
]

# поиск
for x in ('el2', 'el22', 'el42', 5, 'not_found'):
    idx = find_hier_index(lst, x)
    print(f'{x:>10} =>', 'не найдено' if idx == None else 'list['+']['.join(map(str, idx))+']')
    
       el2 => list[1][0]
      el22 => list[1][2]
      el42 => list[1][3][4][1]
         5 => list[2][1]
 not_found => не найдено
→ Ссылка