Идентифицировать элементы в двоичных списках с помощью одной цифры
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 шт):
Ну вот, вы как-то криво объясняете, и будем считать, что я так-же криво это понимаю. Но из ваших приведенных примеров пытаемся извлечь зерна смысла вашего вопроса. И получаем:
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
Если ваш вопрос понят совсем криво, то попытайтесь его переформулировать более "ровно".
Если ух вам нужно получить координаты значения, то можно сделать так:
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)))
Опять же, все считается с нуля.
Двойной цикл с 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')