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

Python中的filter函数的用法是什么?

发布时间:2023-07-05 22:59:43

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函数返回的是一个生成器,可以通过遍历或转化为其他容器类型来获取结果。