Наложение маски из индексов на список
Необходимо по маске индексов получить список групп элементов списка. Пример:
Маска:
[[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.