Фильтрация вложенного списка, функциональное программирование
Как мне отфильтровать вложенный лист list_even_odd, так чтобы для входного списка списков получить список нечётных по порядку списков (первый, третий и так далее), оставив в каждом только нечётные по порядку элементы. Например, для из списка [[1, 2, 3], [4, 5, 6], [7, 8, 9]] должен получиться список [[1, 3], [7, 9]].
list_even_odd = [
[1, 2, 3, 4, 5],
['c', 'a', 't'],
['d', 'o', 'g'],
[100, 200, 300, 400],
[True, False],
[],
[],
]
# не подходит надо по индексу а не по значению иначе пропускает []
list_even = filter(lambda index: list_even_odd.index(index) % 2 == 0, list_even_odd.copy())
list_filter_even = list(map(lambda x: list(filter(lambda item: x.index(item) % 2 == 0, x)), list_even))
Ответы (1 шт):
Автор решения: zaborschicov
→ Ссылка
Вариант с for
leo = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #входные данные
lod = [i[::2] for i in leo[::2]] #берём только нечётные вложенные списки, а в них оставляем только нечётные списки
print(lod)
Тоже самое с map(применяет функцию ко всем элементам списка, возвращает итерируемый объект, не список, по этому тип надо сменить на список, как сделал я) и анонимной функцией, о которой говорил автор в комментариях
leo = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #входные данные
lod = list(map(lambda lt: lt[::2], leo[::2])) #берём только нечётные вложенные списки и применяем к ним функцию которая оставляет только нечётные элементы, после этого приводим тип объекта к list
print(lod)
Комбо – for и lambda (не рекомендуется использовать, однако упомянуть думаю будет не лишним):
leo = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #входные данные
f = lambda lt: lt[::2]
lod = [f(i) for i in leo[::2]] #проходимся по нечётным вложенным спискам, применяя к ним функцию, которая оставлять только нечётные элементы
print(lod)