Что делает функция `filter()` в Python?

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

Функция filter() в Python - это встроенная функция, которая используется для фильтрации элементов из итерируемого объекта (например, списка, кортежа, строки) на основе заданного условия.

Она принимает два аргумента:

  1. Функция-предикат (predicate function): Эта функция принимает один аргумент (элемент итерируемого объекта) и возвращает булево значение (True или False). Если функция возвращает True, элемент включается в результирующую последовательность; если False - исключается.
  2. Итерируемый объект (iterable): Список, кортеж, строка или любой другой объект, поддерживающий итерацию.

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

Пример:

    
def is_even(x):
  return x % 2 == 0

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

even_numbers = filter(is_even, numbers)

# Чтобы получить список, нужно преобразовать итератор в список:
even_numbers_list = list(even_numbers)

print(even_numbers_list)  # Вывод: [2, 4, 6, 8, 10]
    
  

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

Часто для краткости вместо именованной функции-предиката используют анонимную функцию (lambda-функцию):

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

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

even_numbers_list = list(even_numbers)

print(even_numbers_list) # Вывод: [2, 4, 6, 8, 10]
    
  

Ключевые моменты:

  • filter() возвращает итератор, а не сразу список или кортеж.
  • Для преобразования итератора в список, кортеж или другой тип данных необходимо использовать соответствующие функции преобразования (например, list(), tuple()).
  • Функция-предикат должна принимать ровно один аргумент.
0