Python函数:使用filter()函数对容器中的元素进行筛选操作
Python中的filter()函数是一个内置函数,它可以对容器中的元素进行筛选操作。它会接受一个函数和一个可迭代对象作为参数,在可迭代对象中筛选出满足特定条件的元素,并返回一个生成器对象。
filter()函数的基本语法如下:
filter(function, iterable)
其中,function为用于筛选的函数,接受一个参数并返回一个bool值,如果为True则保留该元素,否则从结果中移除。iterable为需要筛选的可迭代对象,可以是列表、元组、字典等。
下面通过一些例子来演示使用filter()函数的不同方式:
1. 使用lambda函数,筛选出所有的偶数
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x%2 == 0, lst))
print(even_numbers) # [2, 4, 6, 8, 10]
在这个例子中,我们传入了一个lambda函数作为函数参数,这个lambda函数接受一个参数x,判断x%2是否等于0,如果为True则保留x,否则从lst中删除x。最后,我们将生成器对象转换成列表形式,得到了所有的偶数。
2. 筛选出所有的非空字符串
str_lst = ["hello", "", "world", "", "python"]
non_empty_strs = list(filter(lambda s: s != "", str_lst))
print(non_empty_strs) # ["hello", "world", "python"]
在这个例子中,我们使用了一个lambda函数来判断字符串是否为空串,如果不是,则保留该字符串。最后,我们再将生成器对象转换成列表形式,得到了所有的非空字符串。
3. 过滤出所有年龄大于18岁的人
people = [
{"name": "Alice", "age": 20},
{"name": "Bob", "age": 16},
{"name": "Charlie", "age": 25},
{"name": "David", "age": 18}
]
adults = list(filter(lambda x: x["age"] > 18, people))
print(adults) # [{"name": "Alice", "age": 20}, {"name": "Charlie", "age": 25}]
在这个例子中,我们使用了一个lambda函数来判断人的年龄是否大于18岁,如果是,则保留该人的信息。最后,我们将生成器对象转换成列表形式,得到了所有年龄大于18岁的人的信息。
总结:
从上面的例子中可以看出,使用filter()函数可以轻松地从一个可迭代对象中筛选出符合特定条件的元素,可以大大简化我们的代码。一般来说,使用lambda函数比较方便,但是如果需要复杂的判断,也可以定义一个单独的函数进行筛选。
