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函数,使得代码更为简洁易懂。
