📜  Python filter()

📅  最后修改于: 2020-09-20 04:02:46             🧑  作者: Mango

filter()方法从可迭代的元素构造一个迭代器, 函数针对该迭代器返回true。

简而言之, filter()方法借助一个测试可迭代对象中每个元素是否为真的函数来过滤给定的可迭代对象。

filter()方法的语法为:

filter(function, iterable)

filter()参数

filter()方法采用两个参数:

  1. 函数 – 函数测试,如果真或假的迭代回报元素。如果没有,该函数默认为标识的函数 -如果任何元素都是假的,其返回false
  2. 可迭代-要过滤的可迭代,可以是集合,列表,元组或任何迭代器的容器

从filter()返回值

filter()方法返回一个迭代器,该迭代器通过了可迭代对象中每个元素的函数检查。

filter()方法等效于:

# when function is defined
(element for element in iterable if function(element))

# when function is None
(element for element in iterable if element)

示例1:filter()如何处理可迭代列表?

# list of letters
letters = ['a', 'b', 'd', 'e', 'i', 'j', 'o']

# function that filters vowels
def filterVowels(letter):
    vowels = ['a', 'e', 'i', 'o', 'u']

    if(letter in vowels):
        return True
    else:
        return False

filteredVowels = filter(filterVowels, letters)

print('The filtered vowels are:')
for vowel in filteredVowels:
    print(vowel)

输出

The filtered vowels are:
a
e
i
o

在这里,我们有一个字母列表,只需要过滤掉其中的元音。

我们可以使用for循环遍历letters列表中的每个元素,并将其存储在另一个列表中,但是在Python,使用filter()方法可以使此过程变得更加轻松快捷。

我们有一个filterVowels 函数 ,用于检查字母是否为元音。该函数与字母列表一起传递给filter()方法。

然后, filter()方法将每个字母传递给filterVowels()方法以检查其是否返回true。最后,它创建返回true(元音)的迭代器。

由于迭代器本身并不存储值,因此我们遍历它并逐一打印出元音。

示例2:没有filter 函数的 filter()方法如何工作?

# random list
randomList = [1, 'a', 0, False, True, '0']

filteredList = filter(None, randomList)

print('The filtered elements are:')
for element in filteredList:
    print(element)

输出

The filtered elements are:
1
a
True
0

在这里,我们在randomList有一个数字, 字符串和布尔值的随机列表。

我们将randomList传递给filter()方法,第一个参数(filter 函数)为None

将filter 函数为None时,该函数默认为Identity 函数,并检查randomList每个元素是否为true。

当我们遍历最终的filteredList ,我们得到的元素为true: 1, a, True and '0' ( 字符串的 '0'也为true)。