map + filter в одном выражении
@python_quizРазберем этот квиз
Условие — короткий фрагмент Python-кода:

Разберём, что здесь происходит.
Пошаговый разбор
- filter(lambda x: x > 1, nums)
- Пробегает по списку nums и оставляет элементы, для которых условие истинно.
- Для nums = [1, 2, 3] останутся [2, 3].
- В Python 3 filter возвращает ленивый итератор (объект filter), а не список.
- map(lambda x: x * 2, ...)
- Берёт каждый элемент из результирующего итератора filter и применяет функцию, удваивая значение.
- Для [2, 3] получится [4, 6].
- map тоже возвращает итератор в Python 3.
- list(...)
- Преобразует итоговый итератор map в список и печатает его.
Замечание: импорт reduce здесь не используется — он никак не влияет на вывод.
Что напечатает код
Результат вывода:

Анализ вариантов (почему одни неверны, другие логичны)
- Вариант с [2, 4, 6]
- Неверно: это выглядело бы как будто все элементы были сначала умножены на 2, а затем применён filter, или filter вовсе не сработал. На самом деле 1 отфильтровывается, поэтому первого элемента *2 нет в результате.
- Вариант с [4, 6]
- Соответствует тому, что делает код: сначала удаляем элементы ≤ 1, затем удваиваем оставшиеся.
- Вариант с [1, 2, 3]
- Неверно: ничего из кода не оставляет список без изменений — тут и filter, и map изменяют последовательность.
- Вариант «Будет исключение, т.к. filter вернёт итератор»
- Неверно: хотя filter действительно возвращает итератор в Python 3, это нормально — map умеет принимать итераторы, а list корректно их итерирует. Исключения не будет.
Полезные примеры и альтернативы
Эквивалент через list comprehension (чаще читается и используется в Python):

Посмотреть типы промежуточных объектов:

Пример проблемы с исчерпанием итератора:

Если вы собираетесь многократно проходить по результату filter, имеет смысл сначала материализовать его в список.
Вывод
Комбинация filter + map в Python 3 работает через ленивые итераторы. Это экономит память, но требует внимания: итераторы одноразовые. В конкретном фрагменте код сначала отбрасывает 1, затем удваивает оставшиеся элементы, поэтому итогом является список [4, 6].