Функция filter() в Python

Функция filter() в Python: синтаксис, описание и примеры использования

Функция filter() в Python позволяет отфильтровать элементы из последовательности на основе заданного условия. Она возвращает новую последовательность, содержащую только элементы, для которых функция-условие вернула значение True.

Синтаксис функции filter()

Синтаксис функции выглядит следующим образом:

filter(function, iterable)

где function — это функция, которая будет применяться к каждому элементу iterable, а iterable — это последовательность, которую необходимо отфильтровать.

function должна быть функцией, которая возвращает булево значение (True или False) в зависимости от того, должен ли элемент быть включен в результирующую последовательность. Эта функция может быть передана в качестве аргумента или определена как lambda-функция.

Примеры использования функции filter()

Использование filter() с лямбда-функцией

Пример использования filter() с лямбда-функцией для фильтрации четных чисел из списка:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  

#[2, 4, 6, 8, 10]

В этом примере, функцией-условием является лямбда-функция lambda x: x % 2 == 0, которая проверяет, является ли число четным (остаток от деления на 2 равен 0). Функция-условие передается в filter() в качестве первого аргумента, а список numbers в качестве второго аргумента. filter() возвращает новый итерируемый объект, содержащий только четные числа из исходного списка. Мы затем преобразуем этот итерируемый объект в список, с помощью функции list(), и выводим результат.

Использование filter() с пользовательской функцией

Сделаем тоже самое, что и в примере выше, но с пользовательской функцией:

def is_even(num):
    """
    Функция проверяет, является ли число четным.
    """
    return num % 2 == 0

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

# использование функции filter() для фильтрации четных чисел из списка numbers
filtered_numbers = list(filter(is_even, numbers))

print(filtered_numbers)  

#[2, 4, 6, 8, 10]

Здесь функция is_even() используется в качестве пользовательской функции для проверки четности числа. filter() применяет функцию is_even() к каждому элементу списка numbers и возвращает только те элементы, для которых функция is_even() возвращает True. Результат фильтрации затем преобразуется в список при помощи функции list().

Использование filter() со списком словарей

Для использования функции filter() со списком словарей можно передать функцию-условие и список словарей в качестве аргументов.

Допустим, у нас есть список словарей, содержащий информацию о различных людях. Чтобы отфильтровать только тех людей, чей возраст меньше или равен 30 годам, можно использовать функцию-условие. Затем мы можем использовать filter(), чтобы создать новый список, содержащий только тех людей, чей возраст меньше или равен 30 годам:

people = [{'name': 'Alice', 'age': 25},
          {'name': 'Bob', 'age': 30},
          {'name': 'Charlie', 'age': 35},
          {'name': 'David', 'age': 40}]

def age_less_than_30(person):
    return person['age'] <= 30

filtered_people = list(filter(age_less_than_30, people))

#[{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]

Плюсы и минусы функции filter()

Плюсы:

  • Функция filter() позволяет быстро и удобно выбрать элементы из последовательности на основе заданного условия.
  • Можно использовать как встроенную функцию, так и определить свою собственную функцию для отбора элементов.
  • Результатом работы функции является новая последовательность, что позволяет сохранить исходную последовательность в неизменном виде.

Минусы:

  • Использование lambda-функций может привести к усложнению кода и ухудшению его читаемости.
  • Если последовательность очень большая, то создание новой последовательности может привести к увеличению объема памяти, потребляемого программой.

Советы по работе с функцией

  • Если условие отбора элементов довольно сложное, рекомендуется определить свою собственную функцию, которая будет выполнять это условие.
  • При работе с большими последовательностями рекомендуется использовать генераторы вместо списков, чтобы избежать создания больших объектов в памяти.
  • Не злоупотребляйте функцией filter(). Если необходимо выполнить несколько условий отбора элементов, рекомендуется использовать циклы или условные выражения.

Заключение

Функция filter() является мощным инструментом для отбора элементов из последовательности на основе заданного условия. Она позволяет быстро и удобно выбирать элементы и создавать новую последовательность. Однако, необходимо использовать ее с осторожностью и не злоупотреблять ее возможностями, чтобы не усложнить код и не ухудшить его читаемость.

Содержание: