lambda, map и filter в Python
Разберёмся с этими тремя элементами Python, которые очень часто применяются вместе, потому и были объединены мной в одну статью.
Первой я хочу рассмотреть конструкцию lambda. Это способ определения анонимной функции("лямбды", как их ещё называют). Тут слово "анонимный" никак не связано с Роскомнадзором и сетью Tor, просто у таких функций нет имени. Постойте, а как к ним обращаться? А нам это и не нужно, мы хотим просто передать простенькую функцию как аргумент куда-нибудь и забыть про неё.
Объявляются такие функции следующим образом:
lambda <аргументы>: <выражение>
Например вот функция, которая возвращает куб данного числа:
lambda x: x**3
Красиво, просто, пока непонятно зачем. Для примера обратимся к методу sort и сделаем сортировку по обратному значению(даже не спрашивайте зачем).
a = [1, -2, 4, 5, 228, -322] a.sort(key=lambda x: 1/x) # [-2, -322, 228, 5, 4, 1]
Теперь перейдём к двум похожим, но разным функциям map и filter, в которые очень часто передают лямбда функции.
map принимает 2 аргумента: функцию и массив, и возвращает список(на самом деле специальный map объект), в котором ко всем элементам массива применили нашу функцию. Так как с map объектом мы ничего интересного сделать не можем, то его мы превратим обратно в список.
a = [1, -2, 4, 5, 228, -322] mapped = list(map(lambda x: x**2, a)) # Список квадратов чисел
filter принимает всё те же 2 аргумента и возвращает filter объект(который опять же мы превратим в список), в котором остались только те элементы, на которых функция истинна. Например:
a = [1, -2, 4, 5, 228, -322] filtered = list(filter(lambda x: x < 10, a)) # Список чисел меньше 10
Благодаря этим двум функциям и конструкции lambda можно сократить рутинный код до однострочника. Однако сильно увлекаться этим не стоит, а то рискуете сделать свою программу нечитаемой.
Больше статей в группе SnakeBlog