如何使用Pythonfilter函数过滤数据
Python中内置的filter函数可以对一个序列进行过滤操作,返回满足条件的元素集合,其最基本的用法是以一个函数和一个序列作为参数,返回一个迭代器。
filter函数的参数分别为一个函数和一个可迭代对象,该函数的返回值为True或False表示该元素是否保留。filter函数返回一个可迭代器,其中包含了符合条件的元素。可以对原序列进行过滤操作,返回符合条件的元素序列。
示例:
假设有以下列表:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
现在需要保留列表中所有大于5的元素,可以使用filter函数进行过滤。
result = list(filter(lambda x: x > 5, lst))
这里使用了lambda表达式来定义过滤函数,返回大于5的元素。函数的返回值为True或False,filter函数根据该返回值判断是否保留该元素。最后使用list函数将过滤之后的结果转化为列表类型。
输出结果:
[6, 7, 8, 9, 10]
使用filter函数可以对输入进行一些复杂的筛选,包括基础类型、自定义对象、元组等等。
示例1:
设有列表:
strs = ['apple', 'orange', 'grape', 'banana', 'peach', 'pineapple']
要求保留长度大于5的字符串元素。
result = list(filter(lambda x: len(x) > 5, strs))
输出结果:
['orange', 'pineapple']
示例2:
设有一个学生类定义:
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def __str__(self):
return f"{self.name}, {self.age}, {self.score}"
现在需要按照成绩,保留大于90分的学生。
students = [
Student('Tom', 18, 87),
Student('Jerry', 19, 92),
Student('Lucy', 17, 95),
Student('Amy', 20, 89)
]
result = list(filter(lambda s: s.score > 90, students))
输出结果:
[Jerry, 19, 92, Lucy, 17, 95]
示例3:
假设有一个元组列表:
tuples = [(1, 2), (3, 4), (5, 6), (7, 8)]
现在需要保留元组中第一个元素大于2的项:
result = list(filter(lambda t: t[0] > 2, tuples))
输出结果:
[(3, 4), (5, 6), (7, 8)]
总之,Python内置的filter函数可以方便地对数据进行筛选与过滤。通过灵活的Lambda表达式定义,可以使其适用于包括基础类型、自定义对象、元组等不同类型的结构。
