Python中的filter函数的用法是什么?
filter函数是Python中内置的一个函数,主要用于过滤序列和迭代器,并根据指定的条件筛选出符合条件的元素。
该函数的基本语法为:filter(function, iterable)
其中,function指定了一个函数,用于对iterable中的每个元素进行判断。该函数只能接受一个参数,返回值为布尔类型(True或False)。如果function返回True,则保留该元素;如果返回False,则过滤掉该元素。而iterable则可以是一个序列、列表、字典、字符串等可迭代对象。
filter函数返回一个filter对象,该对象是一个生成器,可以通过循环或转化为其他容器类型来获得筛选后的结果。
下面,我将详细介绍filter函数的用法及示例。
1. 过滤出奇数:
首先,我们定义一个函数is_odd,用于判断一个数字是否为奇数:
def is_odd(n):
return n % 2 == 1
然后,我们使用filter函数对一个列表进行过滤,只保留其中的奇数:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = filter(is_odd, lst)
print(list(result))
运行结果为:[1, 3, 5, 7, 9]
2. 过滤出包含特定字符的字符串:
我们定义一个函数contains_vowel,判断一个字符串是否包含元音字母:
def contains_vowel(s):
vowels = 'aeiou'
for c in s:
if c.lower() in vowels:
return True
return False
然后,我们使用filter函数对一个字符串列表进行过滤,只保留其中包含元音字母的字符串:
lst = ['apple', 'banana', 'orange', 'grape', 'pear']
result = filter(contains_vowel, lst)
print(list(result))
运行结果为:['apple', 'banana', 'orange', 'grape']
3. 过滤出年龄大于等于18的人员:
我们定义一个函数is_adult,判断一个人员的年龄是否大于等于18:
def is_adult(person):
return person['age'] >= 18
然后,我们使用filter函数对一个人员列表进行过滤,只保留其中年龄大于等于18的人员:
persons = [
{'name': 'Alice', 'age': 25},
{'name': 'Bob', 'age': 17},
{'name': 'Charlie', 'age': 30},
{'name': 'David', 'age': 16},
{'name': 'Emily', 'age': 20}
]
result = filter(is_adult, persons)
print(list(result))
运行结果为:[{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 30}, {'name': 'Emily', 'age': 20}]
通过以上示例,我们可以看出filter函数的用法和作用。可以根据不同的需求,自定义不同的判断条件函数,对序列或迭代器进行筛选过滤,得到符合条件的元素。
需要注意的是,filter函数返回的是一个生成器,可以通过遍历或转化为其他容器类型来获取结果。
