欢迎访问宙启技术站
智能推送

如何使用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()函数将其转换为列表。