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

Python中的filter函数简介及应用

发布时间:2023-06-25 18:37:25

Python中的filter函数是一种高阶函数,它能够对序列进行筛选操作,并返回一个由满足条件的元素组成的新序列。filter函数接收两个参数, 个参数是一个函数,第二个参数是一个序列。filter函数将会对序列中的每一个元素依次调用函数,并根据函数的返回值判断该元素是否满足条件。如果该元素满足条件,则被保留下来,否则被过滤掉。最终,filter函数返回的是一个新的序列,其中只包含满足条件的元素。

filter函数的语法结构如下所示:

filter(function, iterable)

其中,function表示要对序列中的每个元素进行判断的函数,iterable表示要筛选的序列。

下面是一个示例,我们定义了一个函数is_even用于判断一个数字是否是偶数,然后使用filter函数对一个列表进行筛选,只保留其中的偶数。

def is_even(x):
    return x % 2 == 0

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(is_even, numbers))

print(even_numbers)

运行结果为:

[2, 4, 6, 8, 10]

从结果来看,只有偶数被保留了下来,而奇数被过滤掉了。

除了使用函数来判断元素是否满足条件以外,我们也可以使用lambda表达式来简化代码:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

print(even_numbers)

运行结果与之前相同:

[2, 4, 6, 8, 10]

除了上面的示例以外,filter函数还可以用于筛选字符串、列表、元组等数据结构中的元素。下面是一些更为复杂的示例:

### 筛选出长度大于等于5的字符串

words = ['apple', 'banana', 'orange', 'pear', 'watermelon', 'grape']
long_words = list(filter(lambda x:len(x)>=5, words))

print(long_words)

运行结果为:

['apple', 'banana', 'orange', 'watermelon']

### 筛选出所有年龄大于18岁的人

data = [
    {'name': 'Tom', 'age': 20},
    {'name': 'Amy', 'age': 17},
    {'name': 'Jack', 'age': 25},
    {'name': 'Lucy', 'age': 16},
    {'name': 'Kate', 'age': 22}
]

adults = list(filter(lambda x:x['age']>=18, data))

print(adults)

运行结果为:

[{'name': 'Tom', 'age': 20}, {'name': 'Jack', 'age': 25}, {'name': 'Kate', 'age': 22}]

### 筛选出包含数字的元素

items = ['abc', 123, 'def', 456, 'xyz']

def contains_digit(s):
    for c in str(s):
        if c.isdigit():
            return True
    return False

filtered_items = list(filter(contains_digit, items))

print(filtered_items)

运行结果为:

[123, 456]

从上述示例可以看出,filter函数在Python中具有广泛的应用场景,可以用于对数据进行筛选、过滤等操作。在实际开发中,我们可以根据具体业务需求,灵活地运用filter函数,使得代码更为简洁易懂。