Одна особенность filter



Синтаксис встроенной функции filter такой:



filter(function, iterable).



Эта функция фильтрует значения переданной последовательности с помощью функции function. Если function получает очередной элемент последовательности и возвращает True, то элемент попадает в результат работы filter, иначе нет.



Например, таким способом можно отфильтровать только строки, состоящие из чисел:

 

>>> strings = ['two', 'list', '', 'dict', '100', '1', '50']

>>> list(filter(str.isdigit, strings))

['100', '1', '50']



Или только четные значения:

 

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

list(filter(lambda x: x % 2 == 0, numbers))



Часто в качестве фильтров используют лямбда-функции или член-функции классов.



А еще (внезапно) вместо функции можно использовать None:

 

>>> random = [1, 'a', 0, False, True, '0', '']

>>> list(filter(None, random))

[1, 'a', True, '0']



И тогда filter вернет только truthy значения. 🐠