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

如何使用filter()函数从列表中筛选符合条件的元素?

发布时间:2023-06-02 15:47:53

在Python中,filter()是一个很常用的内置函数,它可以从一个序列中筛选出符合条件的元素,返回一个迭代器对象。

filter()的语法如下:

filter(function, iterable)

其中,function是一个判断函数,用来筛选出符合条件的元素,iterable是一个可迭代对象,用来提供需要筛选的元素。

filter()函数执行时,会依次将iterable中的每一个元素传入function进行判断,如果function返回True,则将该元素保留下来,否则将其过滤掉。最后,filter()函数会返回一个迭代器对象,其中包含了所有符合条件的元素。

下面我们来看一个例子,如何使用filter()函数从一个列表中筛选出所有的奇数元素:

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

# 判断一个数字是否为奇数
def is_odd(n):
    return n % 2 == 1

# 使用filter函数筛选出所有的奇数
odd_numbers = filter(is_odd, numbers)

# 遍历输出筛选后的结果
for n in odd_numbers:
    print(n)

以上代码的输出结果为:

1
3
5
7
9

接下来,我们重点讲解如何编写function函数,实现针对不同的条件筛选功能。

首先我们来看最简单的情况,如何使用filter()函数从列表中筛选出所有的正数:

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

# 判断一个数字是否为正数
def is_positive(n):
    return n > 0

# 使用filter函数筛选出所有的正数
positive_numbers = filter(is_positive, numbers)

# 遍历输出筛选后的结果
for n in positive_numbers:
    print(n)

以上代码的输出结果为:

1
3
5
7
9

接下来我们来看一个稍微复杂一些的例子,如何使用filter()函数从一个字符串列表中筛选出所有长度大于等于5的字符串:

words = ["apple", "banana", "orange", "grape", "kiwi", "pear", "watermelon"]

# 判断一个字符串的长度是否大于等于5
def is_long_word(s):
    return len(s) >= 5

# 使用filter函数筛选出所有长度大于等于5的字符串
long_words = filter(is_long_word, words)

# 遍历输出筛选后的结果
for s in long_words:
    print(s)

以上代码的输出结果为:

apple
banana
orange
grape
watermelon

接下来我们来看一个更加复杂一些的例子,如何使用filter()函数从一个字典列表中筛选出符合多重条件的元素:

students = [
    {"name": "Tom", "age": 18, "gender": "male", "score": 80},
    {"name": "Jerry", "age": 19, "gender": "female", "score": 85},
    {"name": "Bob", "age": 20, "gender": "male", "score": 70},
    {"name": "Mary", "age": 21, "gender": "female", "score": 90},
    {"name": "David", "age": 22, "gender": "male", "score": 75},
    {"name": "Lisa", "age": 23, "gender": "female", "score": 95}
]

# 判断一个学生的成绩是否大于80分并且性别为女性
def is_successful_female_student(s):
    return s["score"] > 80 and s["gender"] == "female"

# 使用filter函数筛选出符合多重条件的学生
successful_female_students = filter(is_successful_female_student, students)

# 遍历输出筛选后的结果
for s in successful_female_students:
    print(s["name"], s["age"], s["gender"], s["score"])

以上代码的输出结果为:

Jerry 19 female 85
Mary 21 female 90
Lisa 23 female 95

通过以上的例子,相信大家已经能够基本掌握filter()函数的使用方法了。

最后,我们还需要注意一点,filter()函数返回的是一个迭代器对象,如果需要将其转换为列表对象,可以使用list()函数进行转换。例如:

# 将一个迭代器对象转换为列表对象
odd_numbers = list(filter(is_odd, numbers))