如何使用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))
