filter()
函数根据函数的结果从可迭代对象中选择元素。
示例
# 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() 语法
filter(function, iterable)
filter() 参数
该函数接受两个参数
filter() 返回值
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']
if letter in vowels:
return True
else:
return False
# selects only vowel elements
filtered_vowels = filter(filter_vowels, letters)
# converting to tuple
vowels = tuple(filtered_vowels)
print(vowels)
# Output: ('a', 'e', 'i', 'o')
上述程序的工作原理如下:
letters
的每个元素都传递给filter_vowels()
函数- 如果
filter_vowels()
返回True
,则 filter() 选择该元素
注意:这里,程序返回迭代器,我们使用 vowels = tuple(fitered_vowels)
将其转换为元组。
更多关于 Python filter()
Python filter() 与 Lambda
我们还可以将 Python filter()
函数与lambda 函数一起使用。例如,
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]
在上面的示例中,lambda 函数仅对偶数返回 True
。因此,filter()
函数返回一个仅包含偶数的迭代器。
在 filter() 中使用 None 作为函数
当 None
作为 filter()
函数的第一个参数使用时,它会提取所有在转换为布尔值时评估为 True
的元素。例如,
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']
这里,1
、'a'
、True
和 '0'
在转换为布尔值时被认为是 True
。
另请阅读