Функция filter является встроенной функцией языка и имеет следующий синтаксис:
filter(func or None, *iterables) --> filter object
Функция filter принимает в качестве первого аргумента должна принимать функцию, возвращающую значение логического типа (True или False). Вторым аргументом filter принимает итерируемый объект, к которым относятся списки, кортежи, словари и т.д. Результатом работы функции filter будет "filter object", он представляет собой итератор, в который войдут все элементы итерируемого объекта, для которых переданная функция вернула True. Давайте разберем на примере:
Наша функция f определяет больше ли переданное ей значение десяти или нет. Передавая эту функцию f и список а внутрь функции filter, мы получим в результате только те элементы списка а, которые больше 10. Более короткая запись этого кода выглядит так:
В примере ниже мы отфильтруем список а по четным значениям.
Ниже пример показывает как использовать встроенный функции внутри filter, но подходят для этого примера только такие встроенные функции, которые возвращают True или False. Сюда идеально подходит функция bool(). Она возвращает True, если ей передать непустое значение, и возвращает False если значение пустое. К пустым значениям относятся 0, пустая строка, пустой список и т.д.
Также в качестве функции вы можете передавать lambda-выражения. В примере ниже мы отберет только те строки из списка, длина которых больше четырех.
Также можно передавать внутрь функции filter встроенные методы классов. К примеру, у строк есть такие методы как isdigit(), isalpha(), isupper(). Все они возвращают логический тип. Запустите программу ниже и вы увидите как они работают.