Поиск индекса элемента в списке, вложенный в список
Есть список, с вложенными списками,
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 => не найдено