如何使用Python中的filter()函数过滤列表数据
发布时间:2023-05-19 17:06:56
在Python中,经常会遇到需要对列表进行筛选的情况,比如只需要保留满足某一条件的元素,或者剔除掉不合法的数据。这时候,就可以用到Python内置的filter()函数。
filter()函数可以接受一个函数和一个序列作为参数,函数会依次作用于序列中的每一个元素,最后返回一个bool值。如果函数返回True,则保留该元素,否则过滤掉该元素。最终返回的是一个新的列表,其中只包含满足条件的元素。
下面通过代码演示来说明如何使用filter()函数过滤列表数据:
1.过滤掉列表中的负数
假设我们有一个列表,里面包含一些整数,我们需要过滤掉其中的负数。可以先定义一个函数,判断一个数是否为正数,然后将这个函数传递给filter()函数:
def positive_num(num):
"""
判断一个数是否为正数
"""
return num > 0
num_list = [-1, 2, -3, 4, -5, 6]
pos_list = list(filter(positive_num, num_list))
print(pos_list) # [2, 4, 6]
2.过滤掉列表中的空字符串
假设我们有一个字符串列表,里面既包含非空字符串,也包含一些空字符串,我们需要过滤掉其中的空字符串。可以先定义一个函数,判断一个字符串是否为空字符串或者只包含空格,然后将这个函数传递给filter()函数:
def not_empty(s):
"""
判断一个字符串是否为空字符串或者只包含空格
"""
return s and s.strip()
str_list = ['abc', '', ' ', 'def']
non_empty_list = list(filter(not_empty, str_list))
print(non_empty_list) # ['abc', 'def']
3.使用lambda表达式过滤列表
上面的例子中,我们定义了两个辅助函数来判断元素是否应该保留。但有时候我们可以用lambda表达式来替代这些辅助函数,更加简洁:
num_list = [-1, 2, -3, 4, -5, 6] pos_list = list(filter(lambda x: x > 0, num_list)) print(pos_list) # [2, 4, 6] str_list = ['abc', '', ' ', 'def'] non_empty_list = list(filter(lambda x: x and x.strip(), str_list)) print(non_empty_list) # ['abc', 'def']
注意到这里的lambda函数是一个匿名函数,只用于一次调用,不需要像上面一样定义一个独立的函数。
总结:
filter()函数是一个非常实用的函数,能够快速地对列表进行筛选。通过定义适合的函数或lambda表达式,我们能够轻松地实现各种条件过滤。需要注意的是,filter()函数返回的是一个迭代器,如果需要使用列表,要用list()函数将其转换为列表。
