На этом шаге мы рассмотрим назначение и использование этой функции.
Функция filter () позволяет выполнить проверку элементов последовательности. Формат функции:
filter(<Функция>, <Последовательность>)
Если в первом параметре вместо названия функции указать значение None, то каждый элемент последовательности будет проверен на соответствие значению True. Если элемент в логическом контексте возвращает значение False, то он не будет добавлен в возвращаемый результат. Функция возвращает объект, поддерживающий итерации (а не список или кортеж, как это было ранее в Python 2). Чтобы получить список в версии Python 3, необходимо результат передать в функцию list(). Пример:
>>> filter(None, [1, 0, None, [], 2]) <filter object at 0x00FD58B0> >>> list(filter(None, [1, 0, None, [], 2])) [1, 2]
Аналогичная операция с использованием генераторов списков выглядит так:
>>> [i for i in [1, 0, None, [], 2] if i] [1, 2]
В первом параметре можно указать ссылку на функцию. В эту функцию в качестве параметра будет передаваться текущий элемент последовательности. Если элемент нужно добавить в возвращаемое функцией filter () значение, то внутри функции обратного вызова следует вернуть значение True, в противном случае - значение False. Удалим все отрицательные значения из списка:
def func(elem): return elem >= 0 arr = [-1, 2, -3, 4, 0, -20, 10] arr = list(filter(func, arr)) print(arr) # Результат: [2, 4, 0, 10] # Использование генераторов списков arr = [-1, 2, -3, 4, 0, -20, 10] arr = [i for i in arr if func(i)] print(arr) # Результат: [2, 4, 0, 10]
На следующем шаге мы рассмотрим функцию reduce().