如何使用Python中的filter()函数进行条件筛选?
Python中的filter()函数是一个内置的高阶函数,它可以从一个可迭代的对象中过滤出满足指定条件的元素。简单来说,就是通过一个函数对一个序列进行过滤,将符合条件的元素组成一个新的序列并返回。
filter()函数的语法如下:
filter(function, iterable)
其中,function是过滤的函数,iterable是待处理的序列,可以是列表、元组、字典、集合、字符串等可迭代的对象。
下面以列表为例,演示如何使用Python中的filter()函数进行条件筛选。
首先,我们定义一个列表:
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
然后,定义一个函数,用于筛选偶数:
>>> def is_even(num):
... return num%2 == 0
接下来,就可以使用filter()函数进行筛选了。将列表lst和函数is_even作为参数传递给filter()函数即可。
>>> new_lst = list(filter(is_even, lst))
>>> print(new_lst)
[2, 4, 6, 8]
以上代码的运行结果是将lst中的元素按照函数is_even的规则进行筛选,只留下偶数元素,最终得到由2、4、6、8组成的新列表new_lst。
除了使用自定义函数作为filter()函数的 个参数,我们还可以使用匿名函数lambda作为条件筛选的函数。
例如,我们可以通过filter()函数筛选出lst中大于5的元素,代码如下:
>>> new_lst = list(filter(lambda x: x>5, lst))
>>> print(new_lst)
[6, 7, 8, 9]
以上代码将lst中大于5的元素筛选出来,最终得到由6、7、8、9组成的新列表new_lst。
需要注意的是,filter()函数返回的是一个迭代器,我们需要将其转换为列表才能打印出来。
除了对列表进行条件筛选,filter()函数还可以对其他类型的可迭代对象进行筛选,例如:
筛选元组中大于零的元素:
>>> tup = (1, -2, 3, -4, 5, -6, 7, -8, 9)
>>> new_tup = tuple(filter(lambda x: x>0, tup))
>>> print(new_tup)
(1, 3, 5, 7, 9)
筛选字典中key为偶数的元素:
>>> dct = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
>>> new_dct = dict(filter(lambda x: x[0]%2==0, dct.items()))
>>> print(new_dct)
{2: 'b', 4: 'd'}
筛选字符串中的小写字母:
>>> s = 'Hello World'
>>> new_s = ''.join(filter(str.islower, s))
>>> print(new_s)
elloorld
总之,filter()函数可以帮助我们快速、方便地对可迭代对象进行条件筛选,非常实用。
