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

Python函数:如何使用filter()函数?

发布时间:2023-05-22 09:55:38

Python的filter()函数提供了一种非常便捷的过滤列表的方法。filter()函数是内置函数之一,它可以接受一个函数和一个列表,然后根据函数的返回值,过滤掉不符合条件的元素,返回符合条件的元素列表。filter()函数的函数参数返回值必须是True或False,其中为True的元素会保存到结果列表中,如下所示:

filtered_list = filter(function, iterable)

在这个语法中,function是用来测试每个元素真值的函数。列表中的每个项都将被传递给这个函数,如果该函数返回True,则该项被保留,否则它将被过滤出去。

使用filter()函数的一个常见应用场景是仅保留列表中符合特定条件的元素,比如仅保留偶数、大于10的数等等。

下面我们将介绍如何使用filter()函数。

1. 过滤出列表中的偶数和大于10的数

假设我们有一个数值列表,我们想要过滤出其中的偶数和大于10的数,可以如下编写代码:

def filter_list(num_list): 
    return list(filter(lambda x: x % 2 == 0 or x > 10, num_list))

num_list = [1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15]
filtered_list = filter_list(num_list)
print(filtered_list)

运行结果为:

[2, 4, 10, 11, 12, 14, 15]

在上面的代码中,我们定义了一个名为filter_list()的函数,该函数的参数是一个列表num_list,其中包含整数类型的值。 filter_list()使用lambda表达式来定义一个函数,函数的参数x表示列表中的每个项。我们使用逻辑运算符or来组合过滤条件,即如果x为偶数或x大于10,则返回True。最后,我们使用list()函数将filter()函数的返回结果转换为列表。

2. 过滤出字符串列表中长度大于等于5且首字母为A的字符串

假设我们有一个字符串列表,我们想要过滤出其中长度大于等于5且首字母为A的字符串,可以如下编写代码:

def filter_str(str_list):
    return list(filter(lambda x: len(x) >= 5 and x[0] == 'A', str_list))

str_list = ['Apple', 'Apricot', 'Banana', 'Pear', 'Ananas']
filtered_str_list = filter_str(str_list)
print(filtered_str_list)

运行结果为:

['Apple', 'Apricot', 'Ananas']

在上面的代码中,我们定义了一个名为filter_str()的函数,该函数的参数是一个字符串列表str_list。 filter_str()使用lambda表达式来定义一个函数,函数的参数x表示列表中的每个项。我们使用逻辑运算符and来组合过滤条件,即如果x的长度大于等于5且首字母为A,则返回True。最后,我们使用list()函数将filter()函数的返回结果转换为列表。

3. 过滤出字典列表中某个键的值等于某个特定值

假设我们有一个字典列表,我们想要过滤出其中某个键的值等于某个特定值,可以如下编写代码:

def filter_dict(dict_list, key_name, key_value):
    return list(filter(lambda x: x[key_name] == key_value, dict_list))

dict_list = [{'Name': 'Tom', 'Age': 19}, {'Name': 'Jerry', 'Age': 20}, {'Name': 'Mike', 'Age': 18}, {'Name': 'John', 'Age': 22}]
filtered_dict_list = filter_dict(dict_list, 'Name', 'Tom')
print(filtered_dict_list)

运行结果为:

[{'Name': 'Tom', 'Age': 19}]

在上面的代码中,我们定义了一个名为filter_dict()的函数,该函数的参数是一个字典列表dict_list,key_name表示要过滤的键名,key_value表示要过滤的键值。 filter_dict()使用lambda表达式来定义一个函数,函数的参数x表示列表中的每个字典。我们使用关系运算符==来判断某个键的值是否与key_value相同,如果相同,则返回True。最后,我们使用list()函数将filter()函数的返回结果转换为列表。

在上述例子中,我们过滤出了字典列表dict_list中Name键的值等于Tom的字典。

4. 过滤出元组列表中 个元素等于某个特定值

假设我们有一个元组列表,我们想要过滤出其中 个元素等于某个特定值的元组,可以如下编写代码:

def filter_tuple(tuple_list, value):
    return list(filter(lambda x: x[0] == value, tuple_list))

tuple_list = [('Red', 10), ('Green', 15), ('Blue', 20), ('Red', 25)]
filtered_tuple_list = filter_tuple(tuple_list, 'Red')
print(filtered_tuple_list)

运行结果为:

[('Red', 10), ('Red', 25)]

在上面的代码中,我们定义了一个名为filter_tuple()的函数,该函数的参数是一个元组列表tuple_list,value表示要过滤的特定值。 filter_tuple()使用lambda表达式来定义一个函数,函数的参数x表示列表中的每个元组。我们使用关系运算符==来判断 个元素是否等于value,如果相同,则返回True。最后,我们使用list()函数将filter()函数的返回结果转换为列表。

在上述例子中,我们过滤出了元组列表tuple_list中 个元素等于Red的元组。

总结

Python的filter()函数提供了一种方便的方法来过滤列表、字符串列表、字典列表和元组列表中符合特定条件的元素。我们可以通过使用lambda表达式来定义一个函数,测试每个元素是否符合特定条件,然后使用filter()函数对列表进行过滤,最后将过滤后的结果转换为列表。使用filter()函数可以使代码更加简洁和易于理解。