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

Python中的Filter函数:按条件筛选列表

发布时间:2023-06-15 08:42:26

在Python中,Filter函数是一种常用的函数,可以按照定义的条件,筛选序列中符合条件的元素并返回新的序列。

Filter函数的用法:

filter(function, iterable)

其中,function是指筛选的条件函数,iterable是指待筛选的序列。Filter函数会遍历源序列,对每个元素都执行一遍条件函数,如果返回True,则该元素会被保留,否则会被剔除。最终,Filter函数返回一个新的序列,其中只包含符合条件的元素。

举个例子:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

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

result = filter(is_odd, lst)
print('筛选结果:', list(result))

运行代码后可以看到,输出结果为:

筛选结果: [1, 3, 5, 7, 9]

这是因为在筛选序列lst时,条件函数is_odd将只保留那些余数为1的元素,也就是所有奇数。

除了用函数来自定义筛选条件外,Filter函数还支持使用lambda表达式来进行筛选。比如,上面的代码可以简化为:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

result = filter(lambda x: x % 2 == 1, lst)
print('筛选结果:', list(result))

这里使用了lambda表达式来实现is_odd函数的功能。

当然,在实际应用中,Filter函数的功能不限于筛选奇数或偶数这样简单的条件。我们可以根据具体需要,自行定义各种条件函数,从而实现不同的筛选目的。

比如,我们可以按照字符串长度对一个字符串列表进行筛选:

lst = ['hello', 'world', 'python', 'code', 'algorithm', 'apple']

def length_is_even(s):
    return len(s) % 2 == 0

result = filter(length_is_even, lst)
print('筛选结果:', list(result))

输出结果为:

筛选结果: ['world', 'python', 'code']

同样的,我们也可以使用lambda表达式来实现同样的功能:

lst = ['hello', 'world', 'python', 'code', 'algorithm', 'apple']

result = filter(lambda s: len(s) % 2 == 0, lst)
print('筛选结果:', list(result))

输出结果与之前一致。

除了筛选列表,Filter函数还可以用于筛选其他序列类型,比如元组和集合等。

tup = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

result = filter(lambda x: x % 3 == 0, tup)
print('筛选结果:', list(result))

输出结果为:

筛选结果: [3, 6, 9]

总的来说,Filter函数是Python中非常实用的函数,可帮助我们轻松地根据条件筛选列表,提高代码的效率和可读性。