Python中的filter函数:过滤序列中的元素,只保留符合条件的元素
在Python中,filter()函数是一个非常强大、实用的高阶函数。可以通过该函数对一个序列进行过滤,只保留符合条件的元素。从而得到一个新的、满足需求的序列。本文将通过具体实例来详细介绍Python中的filter()函数的用法和实现。
1. filter()函数的基本使用方法
filter()函数有两个参数, 个参数是一个函数,第二个参数是一个序列。函数的作用是对序列进行过滤,只保留符合条件的元素。而序列则是需要被过滤的目标。filter()函数将根据函数的返回值,将符合条件的元素(即返回值为True的元素)保留下来,生成一个新的序列。
下面是filter()函数的基本用法,可以看出filter()函数的返回值是一个迭代器(iterator)
示例代码:
def is_odd(n):
return n % 2 == 1
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(is_odd, L)
print(list(result))
输出结果:
[1, 3, 5, 7, 9]
在上述代码中,我们定义了一个名为is_odd()的函数,该函数用于判断一个数是否为奇数(即它是否能被2整除得到奇数)。接下来,我们将L列表传入filter()函数中,根据is_odd()函数的返回值,filter()函数将保留L列表中的所有奇数元素,并生成一个新的迭代器。最后,我们将迭代器通过list()函数转化为列表,并将其打印出来,得到了[1, 3, 5, 7, 9]。
2. filter()函数的灵活运用
在实际使用中,filter()函数的应用非常广泛,下面介绍一些经典的应用场景。
情况1:筛选出大于平均值的数
示例代码:
def mean(L):
return sum(L) / len(L)
def filter_fun(n, mean):
return n > mean
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mean_value = mean(L)
result = filter(lambda n: filter_fun(n, mean_value), L)
print(list(result))
输出结果:
[6, 7, 8, 9, 10]
在这个示例中,我们需要筛选出列表L中大于列表平均数的所有元素。首先,我们定义了一个求平均数的函数mean()。接着,我们定义了一个filter_fun()函数来判断一个数是否大于平均数,该函数有两个参数:一个是需要判断的数,另一个是平均数。
为了方便,这里使用了lambda表达式来定义匿名函数,将filter_fun()函数作为其参数。最后,我们将L列表和filter()函数传入map()函数中,得到一个新的迭代器。最终,我们通过将结果转化为列表的方式,得到了结果[6, 7, 8, 9, 10]。
情况2:删除字符串列表中的空字符串
示例代码:
def not_empty(s):
return s and s.strip()
L = ['hello', '', 'world', 'python', '', '1', '2', '3', '']
result = filter(not_empty, L)
print(list(result))
输出结果:
['hello', 'world', 'python', '1', '2', '3']
在这个示例中,我们定义了一个not_empty()函数,用于判断一个字符串是否为空或只包含空格。该函数的返回值为False表示不符合条件,返回值为True表示符合条件。接着,我们将L列表和filter()函数传入map()函数中,得到一个新的迭代器。最后,我们通过将结果转化为列表的方式,得到了结果['hello', 'world', 'python', '1', '2', '3']。可以看出,被过滤掉的空字符串已经被成功删除了。
结语
通过本文对filter()函数的介绍,相信大家已经了解了该函数在Python中的基本用法和常见应用场景,同时也掌握了如何定义并使用一个筛选函数。filter()函数在开发中是一个非常实用的工具,通过正确的使用该函数,可以提高程序的效率和可读性,达到更高的编码效率。
