filter лениво оставляет элементы, для которых lambda возвращает истинное значение. Остаток x % 2 равен 1 у нечётных чисел и 0 у чётных.
Отбор нечётных элементов списка с использованием lambda и функции filter
filter лениво оставляет элементы, для которых lambda возвращает истинное значение. Остаток x % 2 равен 1 у нечётных чисел и 0 у чётных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Объясните, как работает следующий фрагмент кода.
data = [1, 2, 3, 4, 5]
odd_numbers = filter(lambda x: x % 2, data)
Ответ
filter лениво оставляет элементы, для которых lambda возвращает истинное значение. Остаток x % 2 равен 1 у нечётных чисел и 0 у чётных.
data = [1, 2, 3, 4, 5]
odd_numbers = filter(lambda x: x % 2, data)
print(list(odd_numbers)) # [1, 3, 5]
Результат filter в Python 3 — итератор, не готовый список. Он вычисляет элементы при обходе и исчерпывается после использования. Предикату не обязательно возвращать именно True или False: проверяется истинность результата.
Более явный вариант — lambda x: x % 2 != 0. Если сразу нужен список, [x for x in data if x % 2 != 0] часто читается проще.