Отображение элемента в списке в список списков - PullRequest
0 голосов
/ 17 декабря 2018

Я думаю об эффективном способе сопоставления имен в списке с сгруппированными индексными элементами в списке списков.

Допустим, у меня есть такая группировка:

g = [[0,1],[2]]

Iтакже есть этот список:

names = ["canine", "dog", "feline"]

Я хочу вернуть сопоставленные имена в группу в соответствии с индексом:

result = [["canine","dog"], ["feline"]]

Я не совсем уверен, как это сделать или даже каксделать это эффективно.Вот то, что я имею до сих пор, и это не работает.

final = []
for j in range(len(names)):
    for item in g:
        for inner in item:
            res = []
            if inner == j:
                res.append(names[inner])
        final.append(res)
print(final)

Любые советы будут оценены.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы также можете использовать map с lambda для достижения окончательного результата:

g = [[0, 1], [2]]

names = ["canine", "dog", "feline"]

result = [map(lambda i: names[i], sub_list) for sub_list in g]
# Output: [['canine', 'dog'], ['feline']]
0 голосов
/ 17 декабря 2018

Я думаю, что вы, вероятно, хотите перебрать g, а не names.Нет смысла зацикливаться на names, так как вы будете индексировать его значениями g.В этом случае кажется, что для этого лучше всего подойдет простое понимание списка:

[[names[i] for i in sublist] for sublist in g]
...