Метод Python filter извлекает элементы, и перечисляемых объектов, таких как списки, кортежи и.т.д. Для которых возвращается True в случае успеха, и False в случае неудачи.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Возвращаем True если значение четное
def check_even(number):
if number % 2 == 0:
return True
return False
# Извлекаем элементы, для которых функция check_even() возвращает True
even_numbers_iterator = filter(check_even, numbers)
# конвертируем в список
even_numbers = list(even_numbers_iterator)
print(even_numbers)
# Результат: [2, 4, 6, 8, 10]
Метод Python filter() принимает два аргумента:
Ниже рассмотрим пример использования метода filter()
Пример 1. Как работает метод filter()?
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', 'u')
В данном случае, метод filter() извлекает из списка только гласные буквы из letters.
- Каждый элемент из списка letters передается функции filter_vowels()
- В случае, если filter_vowels() возвращает нам True, этот элемент извлекается из списка, в противном случае, элемент будет отфильтрован
Конечно, задачи такого рода, можно решать и с помощью цикла, но использование функции filter() будет намного правильнее.
Пример 2. Лямбда функция внутри filter()
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]
- В данном случае, мы передаем наш список лямбда функции, находящейся внутри внутри метода filter().
- Функция возвращает нам True для четных чисел, а метод filter() возращает нам последовательность содержащий только четные числа
Пример 3. Использование None в качестве функции внутри метода filter()
# Смешанные элементы в списке
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.