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

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

发布时间:2023-10-10 18:38:25

在Python中,filter函数是一个内置函数,用于从一个可迭代对象中筛选出符合条件的元素,并返回一个迭代器。

filter函数的语法如下:

filter(function, iterable)

其中,function是一个用于筛选的函数,可接受一个参数并返回一个布尔值。iterable是一个可迭代对象,可以是列表、元组、集合、字典等。

filter函数的工作原理很简单,对于可迭代对象中的每个元素,都会调用function函数进行过滤。如果function返回True,则保留该元素;如果返回False,则删除该元素。

下面是一些使用filter函数的示例。

示例1:筛选出列表中的偶数

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

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

even_numbers = list(filter(is_even, numbers))
print(even_numbers)  # 输出 [2, 4, 6, 8, 10]

在这个例子中,我们定义了一个函数is_even,用于判断一个数是否为偶数。然后,我们使用filter函数将is_even函数应用于numbers列表,并将结果保存到even_numbers列表中。最后,我们打印出筛选出的结果。

示例2:筛选出字符串列表中长度大于5的字符串

strings = ["apple", "orange", "banana", "kiwi", "mango", "watermelon"]

def longer_than_5(s):
    return len(s) > 5

long_strings = list(filter(longer_than_5, strings))
print(long_strings)  # 输出 ["orange", "watermelon"]

在这个例子中,我们定义了一个函数longer_than_5,用于判断一个字符串的长度是否大于5。然后,我们使用filter函数将longer_than_5函数应用于strings列表,并将结果保存到long_strings列表中。最后,我们打印出筛选出的结果。

示例3:筛选出字典中年龄大于18的人的姓名

people = [
    {"name": "Alice", "age": 25},
    {"name": "Bob", "age": 17},
    {"name": "Charlie", "age": 30},
    {"name": "David", "age": 20},
]

def is_adult(person):
    return person["age"] > 18

adults = list(filter(is_adult, people))
names = [person["name"] for person in adults]
print(names)  # 输出 ["Alice", "Charlie", "David"]

在这个例子中,我们定义了一个函数is_adult,用于判断一个人的年龄是否大于18。然后,我们使用filter函数将is_adult函数应用于people列表,并将结果保存到adults列表中。最后,我们使用列表推导式从adults列表中提取出人的姓名,并打印出筛选出的结果。

这些示例展示了如何使用filter函数从列表中筛选出符合条件的元素。同时,我们还可以使用lambda表达式来简化代码,更方便地定义筛选条件。