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

Python中使用filter函数的方法

发布时间:2023-06-16 00:42:26

filter函数是Python内置的高阶函数之一,用于过滤序列中的元素,返回一个新的只包含符合条件的元素的序列。它的语法如下:

filter(function, iterable)

其中,function是函数名,表示过滤规则,iterable是一个可迭代的序列。filter函数会对iterable中的每个元素调用function函数,将返回True的元素放入一个新的序列中返回。

下面我们通过一些例子来演示如何使用filter函数。

例1:筛选奇数

我们可以通过定义一个函数来判断一个数是否为奇数,然后将这个函数作为过滤规则传入filter函数中,从而得到一个新的只包含奇数的列表。代码如下:

def is_odd(n):
    return n % 2 == 1

new_list = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(new_list))  # 输出 [1, 3, 5, 7, 9]

首先,我们定义了一个函数is_odd来判断一个数是否为奇数,如果是奇数则返回True,否则返回False。然后,我们将这个函数作为参数传入filter函数中,同时将[1,2,3,4,5,6,7,8,9]作为待过滤的序列。最后通过list函数将过滤后的结果转换为列表并输出。

例2:按条件筛选字符串

除了过滤数字以外,我们也可以使用filter函数按照规定的条件过滤字符串。下面我们定义一个函数,它将返回一个字符串中所有大写字母组成的新字符串,然后将这个函数作为参数传入filter函数中,从而得到一个新的只包含大写字母的字符串。代码如下:

def filter_uppercase(s):
    return ''.join(filter(str.isupper, s))

new_string = filter(filter_uppercase, ['asDFGH', 'PQWerty', 'zxcvbnm'])
print(list(new_string))  # 输出 ['DFGH', 'PQW']

首先,我们定义了一个函数filter_uppercase,它的作用是从一个字符串中取出所有大写字母组成一个新的字符串。在这个函数中,我们调用了Python中内置的str.isupper函数来判断字母是否为大写字母,如果是就返回True,否则返回False;然后传入filter函数中。接着,我们将['asDFGH', 'PQWerty', 'zxcvbnm']作为待过滤序列传入filter函数中。最后,我们将过滤后的结果转换为列表并输出。

例3:筛选非空字符串

除了过滤数字和字符串以外,我们也可以使用filter函数对列表中的非空字符串进行筛选。下面我们定义一个函数,它将返回一个字符串是否为非空字符串的布尔值,然后将这个函数作为参数传入filter函数中,从而得到一个新的只包含非空字符串的列表。代码如下:

def is_not_empty(s):
    return bool(s)

new_list = filter(is_not_empty, ['It', '', 'is', 'a', '', 'test'])
print(list(new_list))  # 输出 ['It', 'is', 'a', 'test']

首先,我们定义了一个函数is_not_empty,它的作用是判断一个字符串是否为非空字符串,如果是则返回True,否则返回False。然后,我们将这个函数作为参数传入filter函数中,同时将['It', '', 'is', 'a', '', 'test']作为待过滤的序列。最后通过list函数将过滤后的结果转换为列表并输出。

总结

filter函数是Python中用来过滤数据的一个强大的工具,它可以筛选数字、字符串等不同的数据结构,进而得到新的只包含满足条件的元素的序列。在使用filter函数时,我们需要定义一个函数来作为过滤规则,然后将这个函数作为参数传递给filter函数,从而将不需要的元素过滤掉,得到新的序列。