如何使用 filter() 函数在 Python 中筛选序列中符合条件的元素?
在 Python 中,filter() 函数是一个内置函数,可以用来筛选一个序列中符合特定条件的元素。filter() 函数返回一个由筛选结果元素组成的可迭代对象,与原序列相同的类型。
filter() 函数语法如下:
filter(function, sequence)
其中,function 是一个函数,用于对 sequence 中的元素进行筛选,返回值为 True 或 False。sequence 是一个序列,可以是列表、元组、字符串、集合等的任何可迭代对象。filter() 函数会逐个遍历 sequence 中的元素,调用 function 函数判断其是否符合筛选条件,并将符合条件的元素打包成一个新的可迭代对象返回。
下面是一个简单的例子,使用 filter() 函数筛选出列表中所有非空字符串元素:
my_list = ['', 'hello', '', 'world', 'python', ''] results = filter(lambda x: x != '', my_list) print(list(results)) # ['hello', 'world', 'python']
在这个例子中,传给 filter() 函数的是一个 lambda 表达式,用来判断列表中元素是否为空字符串。filter() 函数返回的结果是一个可迭代对象,需要用 list() 函数将其转换为列表。最终的结果是一个仅包含非空字符串元素的列表。
除了 lambda 表达式,也可以使用普通的函数作为 filter() 函数的 个参数。下面是一个更复杂的例子,使用 filter() 函数筛选字典中 age 属性大于 18 的元素:
my_dict = {'Peter': {'age': 20, 'gender': 'M'},
'Mary': {'age': 16, 'gender': 'F'},
'John': {'age': 18, 'gender': 'M'},
'Jane': {'age': 21, 'gender': 'F'}}
def is_adult(person):
return person['age'] > 18
results = filter(is_adult, my_dict.values())
print(list(results)) # [{'age': 20, 'gender': 'M'}, {'age': 21, 'gender': 'F'}]
在这个例子中,函数 is_adult() 判断字典中每个元素的 age 属性是否大于 18,返回 True 或 False。filter() 函数使用 is_adult() 函数筛选 my_dict 中符合条件的元素,并将其打包成一个新的可迭代对象返回。
除了 filter() 函数,Python 还有其他常用的筛选函数,例如列表推导式、生成器表达式等。使用哪种方法取决于具体的场景和数据类型。需要注意的是,简洁易懂、易于维护的代码,才是好的代码。
