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

在Python中,如何使用filter()函数过滤列表?

发布时间:2023-12-07 18:57:35

在Python中,可以使用filter()函数过滤列表。filter()函数接受两个参数,第一个参数是一个函数,第二个参数是一个可迭代的对象(列表、元组等)。

filter()函数会依次将可迭代对象中的元素传递给函数进行判断,如果函数返回True,则保留该元素,如果函数返回False,则过滤该元素。

下面是使用filter()函数过滤列表的几种常见使用方法:

1. 使用lambda表达式过滤列表中的偶数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  

输出结果:

[2, 4, 6, 8, 10]

上面的代码中,lambda表达式lambda x: x % 2 == 0判断元素是否为偶数,filter函数会过滤出所有满足条件的元素。

2. 使用普通函数过滤列表中的负数:

def is_negative(n):
    return n < 0

numbers = [1, -2, -3, 4, -5, 6, 7, -8, 9, -10]
negative_numbers = list(filter(is_negative, numbers))
print(negative_numbers)  

输出结果:

[-2, -3, -5, -8, -10]

上面的代码中,自定义函数is_negative()判断元素是否为负数,filter函数会过滤出所有满足条件的元素。

3. 使用filter()函数过滤字符串列表中的非空字符串:

strings = ["", "hello", "", "world", "", "python"]
non_empty_strings = list(filter(None, strings))
print(non_empty_strings) 

输出结果:

['hello', 'world', 'python']

上面的代码中,使用filter(None, strings)过滤非空字符串,由于None在布尔上下文中为False,所以会过滤掉所有空字符串。

4. 使用filter()函数过滤字典列表中满足特定条件的字典:

students = [
    {"name": "Alice", "age": 20},
    {"name": "Bob", "age": 18},
    {"name": "Charlie", "age": 22},
    {"name": "David", "age": 19}
]
adult_students = list(filter(lambda x: x["age"] >= 18, students))
print(adult_students)  

输出结果:

[{'name': 'Alice', 'age': 20}, {'name': 'Bob', 'age': 18}, {'name': 'Charlie', 'age': 22}, {'name': 'David', 'age': 19}]

上面的代码中,lambda表达式lambda x: x["age"] >= 18判断字典中的"age"键对应的值是否大于等于18,filter函数会过滤出所有满足条件的字典。

需要注意的是,filter()函数返回的是一个迭代器对象,需要使用list()函数将其转换为列表,方便查看结果。

通过使用filter()函数,可以快速过滤列表中的元素,使得代码更加简洁和可读。