Идентифицировать элементы в двоичных списках с помощью одной цифры

array = [["a", "b"], ["c", "d", "f"], ["g"], ["h", "j", "k", "l", "m"]]

Есть такой список, представим что у каждого элемента в подписке есть свой уникальный номер начинающийся с 1.

a = 1
b = 2
c = 3
d = 4
и тд..

Как можно спарсить нужный элемент лишь вводя его номер который я показывал выше, то есть на выходе нужно получить (пример):

IN: 1
OUT: a

IN: 5
OUT: f

и тд..

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

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

Ну вот, вы как-то криво объясняете, и будем считать, что я так-же криво это понимаю. Но из ваших приведенных примеров пытаемся извлечь зерна смысла вашего вопроса. И получаем:

import itertools
array = [["a", "b"], ["c", "d", "f"], ["g"], ["h", "j", "k", "l", "m"]]
it=int(input('IN:'))
print('ОUT:',list(itertools.chain(*array ))[it-1])

Имеем:

IN:1
ОUT: a

и

IN:5
ОUT: f

Если ваш вопрос понят совсем криво, то попытайтесь его переформулировать более "ровно".

→ Ссылка
Автор решения: strawdog

Если ух вам нужно получить координаты значения, то можно сделать так:

import pandas as pd

array = [["a", "b"], ["c", "d", "f"], ["g"], ["h", "j", "k", "l", "m"]]

def get_loc(idx:int):
    letters = []
    [letters.extend(x) for x in array]
    df = pd.DataFrame(array)
    res = df.where(df==letters[idx]).dropna(how='all').dropna(axis=1)
    return (letters[idx], res.index[0], res.columns[0])

get_loc(4)

('f', 1, 2)

То есть, под индексом 4 (начиная с нуля) в плоском списке находится f, которая в исходном списке является вторым элементом первого списка (тоже счет с нуля. если нужно, просто прибавьте в функции единицы).

UPDATE

Как выяснилось, элементы в подсписках могут повторятся (неуникальны). В таком случае решение принимает вид:

import pandas as pd

array = [["a", "b"], ["c", "a", "f"], ["g"], ["h", "j", "k", "b", "m"]]

def get_loc(idx:int):
    letters = []
    [letters.extend(x) for x in array]
    df = pd.DataFrame(array)
    res = df.where(df==letters[idx]).dropna(how='all').dropna(how="all", axis=1)
    return (letters[idx], tuple(zip(res.index, res.columns)))

get_loc(1)

('b', ((0, 1), (3, 3)))

Опять же, все считается с нуля.

→ Ссылка
Автор решения: Stanislav Volodarskiy

Двойной цикл с enumerate выдаёт все элементы с индексами. Постройте из них единый справочник, к которому можно обращаться по индексу:

def index_items(a):
    for i, b in enumerate(a):
        for j, c in enumerate(b):
            yield i, j, c


a = [["a", "b"], ["c", "d", "f"], ["g"], ["h", "j", "k", "l", "m"]]
index = tuple(index_items(a))
print(index[4])
$ python map_enumerate.py
(1, 2, 'f')
→ Ссылка