欢迎访问宙启技术站
智能推送

Python中filter()函数的作用和实际应用示例

发布时间:2023-05-26 19:21:21

filter()是Python内置函数之一,其目的是从一个包含多个元素的序列中,按照指定的条件筛选出部分元素,返回一个迭代器对象。

filter()函数具体的用法是:filter(function, iterable),其中function是一个函数,其作用是判断iterable中的每一个元素是否符合某些条件,如果符合则返回True,否则返回False。而iterable则表示一个被遍历的可迭代对象,可以是列表、元组、字典等类型的数据。

下面是一个示例代码,演示用filter()函数筛选一个列表中的所有奇数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def is_odd(n):
    return n % 2 == 1

odd_numbers = list(filter(is_odd, numbers))
print(odd_numbers) # 输出 [1, 3, 5, 7, 9]

在这个例子中,我们传入的函数是is_odd,其作用是判断数字n是否为奇数,如果是则返回True,否则返回False。在调用filter()时,我们将is_odd作为 个参数传入,将列表numbers作为第二个参数传入。filter()函数就会依次遍历numbers中的每一个元素,并调用is_odd函数进行判断。当一个元素满足条件时,它就会被加入到一个新的列表odd_numbers中,最后odd_numbers就被返回。

当我们想要筛选出满足某些条件的元素时,使用filter()函数是一种非常方便的方法。下面是一些例子,说明了filter()的一些实际应用:

1. 过滤掉列表中的空字符串

my_list = ['hello', '', 'world', '', ' ', 'python']
new_list = list(filter(lambda x: x.strip(), my_list))
print(new_list) # 输出 ['hello', 'world', 'python']

在这个例子中,我们使用了lambda函数来作为filter()的 个参数。lambda函数的作用是去掉字符串两端的空格,判断剩下的字符是否为空。如果该字符串不为空,那么lambda函数返回True,filter()函数就会将该元素加入到新的列表new_list中。

2. 过滤出列表中的所有质数

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
prime_list = list(filter(is_prime, my_list))
print(prime_list) # 输出 [2, 3, 5, 7, 11]

在这个例子中,我们定义了一个is_prime函数,用来判断一个数字n是否为质数。filter()函数依次对my_list中的每个数字进行判断,将符合条件的数字加入到新的列表prime_list中。

3. 过滤出字典中符合条件的键值对

my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
new_dict = dict(filter(lambda item: item[1] >= 3, my_dict.items()))
print(new_dict) # 输出 {'c': 3, 'd': 4, 'e': 5}

在这个例子中,我们先将字典转换成包含键值对的元组列表,然后使用lambda函数作为filter()的 个参数。该lambda函数的作用是判断元组的第二个元素是否大于等于3,如果是则返回True。filter()函数依次遍历元组列表,将符合条件的元组加入到新的字典new_dict中,最后返回new_dict。