The filter()
function selects elements from an iterable (list, tuple etc.) based on the output of a function.
The function is applied to each element of the iterable and if it returns True
, the element is selected by the filter()
function.
Example
# returns True if the argument passed is even
def check_even(number):
if number % 2 == 0:
return True
return False
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# if an element passed to check_even() returns True, select it
even_numbers_iterator = filter(check_even, numbers)
# converting to list
even_numbers = list(even_numbers_iterator)
print(even_numbers)
# Output: [2, 4, 6, 8, 10]
filter() Syntax
The syntax of filter()
is:
filter(function, iterable)
filter() Arguments
The filter()
function takes two arguments:
filter() Return Value
The filter()
function returns an iterator.
Note: You can easily convert iterators to sequences like lists, tuples, strings etc.
Example 1: Working of filter()
letters = ['a', 'b', 'd', 'e', 'i', 'j', 'o']
# a function that returns True if letter is vowel
def filter_vowels(letter):
vowels = ['a', 'e', 'i', 'o', 'u']
return True if letter in vowels else False
filtered_vowels = filter(filter_vowels, letters)
# converting to tuple
vowels = tuple(filtered_vowels)
print(vowels)
Output
('a', 'e', 'i', 'o')
Here, the filter()
function extracts only the vowel letters from the letters
list. Here's how this code works:
- Each element of the
letters
list is passed to thefilter_vowels()
function. - If
filter_vowels()
returnsTrue
, that element is extracted otherwise it's filtered out.
Note: It's also possible to filter lists using a loop, however, using the filter()
function is much more cleaner.
Example 2: Using Lambda Function Inside filter()
numbers = [1, 2, 3, 4, 5, 6, 7]
# the lambda function returns True for even numbers
even_numbers_iterator = filter(lambda x: (x%2 == 0), numbers)
# converting to list
even_numbers = list(even_numbers_iterator)
print(even_numbers)
Output
[2, 4, 6]
Here, we have directly passed a lambda function inside filter()
.
Our lambda function returns True
for even numbers. Hence, the filter()
function returns an iterator containing even numbers only.
Example 3: Using None as a Function Inside filter()
# random list
random_list = [1, 'a', 0, False, True, '0']
filtered_iterator = filter(None, random_list)
#converting to list
filtered_list = list(filtered_iterator)
print(filtered_list)
Output
[1, 'a', True, '0']
When None
is used as the first argument to the filter()
function, all elements that are truthy values (gives True
if converted to boolean) are extracted.