Фильтрация вложенного списка, функциональное программирование

Как мне отфильтровать вложенный лист 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)
→ Ссылка