Функція filter() вибирає елементи з ітерованого об’єкта (список, кортеж тощо) на основі вихідних даних функції. Функція застосовується до кожного елемента ітерованого об’єкта, і якщо вона повертає True, то елемент буде обраний функцією filter().
Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Повертаємо True, якщо переданий аргумент є парним def check_even(number): if number % 2 == 0: return True return False numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Якщо елемент, переданий у функцію check_even(), повертає True, вибираємо його even_numbers_iterator = filter(check_even, numbers) # Конвертуємо в список even_numbers = list(even_numbers_iterator) print(even_numbers) |
Результат:
[2, 4, 6, 8, 10]
Синтаксис функції filter()
|
1 |
filter(function, iterable) |
Параметри функції filter()
Функція filter() приймає два параметри:
function — функція;
iterable — ітерований об’єкт, такий як множини, списки, кортежі тощо.
Значення, яке повертає функція filter()
Функція filter() повертає ітератор.
Примітка: Ви можете легко перетворити ітератори на послідовності, такі як списки, кортежі, рядки й т.д.
Приклад №1: Робота функції filter()
|
1 2 3 4 5 6 7 8 9 10 11 12 |
letters = ['a', 'b', 'd', 'e', 'i', 'j', 'o'] # Функція повертає True, якщо елемент є голосною літерою def filter_vowels(letter): vowels = ['a', 'e', 'i', 'o', 'u'] return True if letter in vowels else False filtered_vowels = filter(filter_vowels, letters) # Конвертуємо в кортеж vowels = tuple(filtered_vowels) print(vowels) |
Результат:
('a', 'e', 'i', 'o')
Тут функція filter() отримує лише голосні літери зі списку letters. Ось як працює цей код:
кожен елемент списку letters передається у функцію filter_vowels();
якщо функція filter_vowels() повертає True, цей елемент вилучається, в протилежному випадку він ігнорується.
Примітка: Фільтрувати списки також можна за допомогою циклу, проте використання функції filter() набагато простіше.
Приклад №2: Використання лямбда-функції всередині функції filter()
|
1 2 3 4 5 6 7 8 9 |
numbers = [1, 2, 3, 4, 5, 6, 7] # Лямбда-функція повертає True для парних чисел even_numbers_iterator = filter(lambda x: (x%2 == 0), numbers) # Конвертуємо в список even_numbers = list(even_numbers_iterator) print(even_numbers) |
Результат:
[2, 4, 6]
Тут ми безпосередньо передали лямбда-функцію всередині функції inside(). Наша лямбда-функція повертає True для парних чисел. Отже, функція filter() повертає ітератор, який містить лише парні числа.
Приклад №3: Використання None як функції усередині функції filter()
|
1 2 3 4 5 6 7 8 9 |
# Випадковий перелік random_list = [1, 'a', 0, False, True, '0'] filtered_iterator = filter(None, random_list) # Конвертуємо в список filtered_list = list(filtered_iterator) print(filtered_list) |
Результат:
[1, 'a', True, '0']
Коли None використовується як перший аргумент функції filter(), вилучаються всі елементи, які є True (при перетворенні в логічні значення мають значення True).
