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

Python 中的 filter() 函数:如何使用 filter() 函数筛选出列表中符合条件的元素?

发布时间:2023-06-15 00:40:02

filter() 函数是 Python 中常用的内置函数之一,用于筛选出列表中符合特定条件的元素。filter() 函数的原型如下:

filter(function, iterable)

其中,function 表示用于筛选的函数,可以是自定义函数,也可以是 Python 内置的函数或 lambda 表达式。iterable 表示待筛选的可迭代对象,通常是列表、元组或集合。

filter() 函数的工作原理是,对于 iterable 中的每个元素,将其传入 function 进行判断,如果 function 返回值为 True,则将该元素保留下来。最终将保留下来的元素组成一个新的 iterable 对象返回。

下面我们来看几个具体的示例,演示如何使用 filter() 函数实现常见的筛选操作。

### 筛选出列表中的偶数

我们可以定义一个函数 is_even,用于判断一个数字是否为偶数。然后将函数 is_even 作为参数传入 filter() 函数,对列表进行筛选,最终得到一个新的列表,其中只包含原列表中的偶数。

def is_even(num):
    return num % 2 == 0

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_lst = list(filter(is_even, lst))
print(new_lst)  # [2, 4, 6, 8, 10]

### 筛选出列表中的正数

我们也可以使用 lambda 表达式,直接在 filter() 函数中编写筛选条件。以下代码使用 lambda 表达式筛选出列表中的正数。

lst = [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
new_lst = list(filter(lambda x: x > 0, lst))
print(new_lst)  # [2, 4, 6, 8, 10]

### 筛选出列表中长度大于等于 5 的字符串

下面的示例演示了如何使用 filter() 函数筛选出列表中长度大于等于 5 的字符串。

lst = ['apple', 'banana', 'orange', 'pear', 'grape', 'watermelon']
new_lst = list(filter(lambda x: len(x) >= 5, lst))
print(new_lst)  # ['apple', 'banana', 'orange', 'grape', 'watermelon']

### 筛选出集合中的质数

我们可以借助其他 Python 内置函数或模块,结合 lambda 表达式或自定义函数,实现比较复杂的筛选操作。下面的示例演示了如何使用 filter() 函数筛选出集合中的所有质数。

prime_set = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}

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

new_set = set(filter(is_prime, prime_set))
print(new_set)  # {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}

### 总结

filter() 函数是 Python 中非常实用的内置函数之一,可用于筛选出列表、元组、集合等可迭代对象中的符合条件的元素。使用 filter() 函数的时候,我们需要先定义一个用于筛选的函数,或者使用 lambda 表达式直接编写筛选条件。最后将可迭代对象和筛选函数作为参数传入 filter() 函数即可。