Функция filter() в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

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

Синтаксис:

filter(func, iterable)

Аргументы:

  • func — функция, которая принимает элемент фильтруемого объекта и должна возвращать логическое (bool) значение,
  • iterable — последовательность или объект, который поддерживает итерацию.

Если функция func filterвозвращает False, то элемент итерируемой последовательности не будет включен в результат функции filter().

Если функция фильтра func возвращает None, то мы считаем, что требуется идентичное действие (элемент для элемента в итерации, если элемент), поэтому все элементы, оцененные как False, будут отфильтрованы.

Чтобы получить результат из элементов оцененных пользовательской функцией как False, воспользуйтесь itertools.filterfalse().

Пример:

Давайте определим функцию, чтобы проверить, четное ли число на входе, или нет. Функция вернет True, если число четное, иначе False.

# Функция проверки четности чисел
def is_even(x):
    if x % 2 == 0:
        return True
    else:
    	return False


# Функция вывода с циклом for
def print_filter_items(my_filter):
    for item in my_filter:
        print(item)


# Список из чисел
num_list = [1, 2, 3, 4, 5]
num_filter_list = filter(is_even, num_list)
print_filter_items(num_filter_list)

# Кортеж из чисел
num_tuple = (1, 2, 3, 4, 5)
num_filter_tuple = filter(is_even, num_tuple)
print_filter_items(num_filter_tuple)

Результат:

>>> 2
>>> 4
>>> 2
>>> 4

Воспользуемся lambda функцией:

# Список
my_list = [1, 2, 3, 4, 5, 4.5, 3.7, 8.9, 'Строка', '1.2']

# Фильтрация
my_filter = filter(lambda x: type(x) is int, my_list)

# Отфильтрованный список
my_list_filtered = list(my_filter)

print(my_list_filtered)

Результат (получаем список из целых чисел):

>>> [1, 2, 3, 4, 5]

Усложним фильтрацию:

# Список
my_list = [1, 2, 3, 4, 5, 4.5, 3.7, 8.9, 'Строка', '1.2']

# Фильтрация
my_filter = filter(lambda x: type(x) is int and x > 2, my_list)

# Отфильтрованный список
my_list_filtered = list(my_filter)

print(my_list_filtered)

Результат (выводим целые числа больше 2):

>>> [3, 4, 5]

Пример с функцией None:

# Список
my_list = (True, False, 2, 3, 0.0, 0, 0.7, '', 'B', None)

# Фильтрация
my_filter = filter(None, my_list)

# Отфильтрованный список
my_list_filtered = list(my_filter)

print(my_list_filtered)

Результат:

[True, 2, 3, 0.7, 'B']

Обратите внимание, что нулевая, пустая строка, False и None отфильтровываются, потому что их логическое значение – False.

Теги записи: Python, Основы Python, filter(),
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)