Наложение маски из индексов на список

Необходимо по маске индексов получить список групп элементов списка. Пример:

Маска:

[[3, 4, 5, 6], [7, 8, 9], [10]]

Массив:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

Результат (после наложении маски):

[['d', 'e', 'f', 'g'], ['h', 'i', 'j'], ['k']]

Можно ли это сделать с помощью встроенных функций для работы со списками?


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

Автор решения: Shamus Rezol

Через генераторы именно для списков маск вида list(list(int())):

masks = [[3, 4, 5, 6], [7, 8, 9], [10]]
data  = "abcdefghijklmnop"
retr  = [[data[i] for i in mask] for mask in masks]
print(retr)

Стандартных функций для таких действий не знаю, но ее можно сделать самому по принципу выше.

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

Вроде бы нашел приемлемое решение.

mask = [[3, 4, 5, 6], [7, 8, 9], [10]]
values = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
result = [list(map(lambda x: values[x], each)) for each in mask]
print(result)

Результат:

[['d', 'e', 'f', 'g'], ['h', 'i', 'j'], ['k']]

Правда встает вопрос, насколько это оптимальнее варианта с вложенным генератором, как в ответе Shamus Rezol.

→ Ссылка