Python中的filter函数:如何从列表中筛选出符合条件的元素?
在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表达式来简化代码,更方便地定义筛选条件。
