Python 函数 | filter 函数详解
博友们,你们好,很高兴能在这里和大家分享技术文章,我是
Amo Xiang
,是一名在职企业员工,Amo
来源于上家公司的英文名,本意是爱
。作为刚入行几年互联网行业的小白,博主写博客一方面是为了记录自己的学习过程以及所犯的错误,更多的是希望能够帮助到很多处于起步阶段的萌新,让他们少走弯路。在编写文章时,参考了大量书籍及一些互联网大佬的资源,并结合了自己的工作经验,博主本着科学、严谨的态度、力求精益求精,但疏漏之处在所难免,敬请广大博友批评指正。博客主页:https://blog.csdn.net/xw1680?spm=1011.2124.3001.5113
目录
1. filter() 函数的介绍
1.1 功能
filter() 函数用于 过滤
可迭代对象中不符合条件的元素,返回由符合条件的元素组成的新的迭代器。filter() 函数把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False,来决定保留或丢弃该元素。
1.2 语法
filter(function or None, iterable) --> filter object
参数说明:
(1) function:用于实现判断的函数,可以为 None。
(2) iterable:可迭代对象,如列表、range 对象等。
(3) 返回值:返回一个迭代器对象。
2. filter() 函数的应用
2.1 filter() 函数的基本应用
使用 filter() 函数过滤出 0~100 (不包括 100) 之间的所有奇数,代码如下:
def is_odd_number(number): # 定义一个判断偶数的函数
# 第一种
# if number % 2 != 0:
# return True
# return False
# 第二种
# return True if number % 2 != 0 else False # 简写
# 第三种
return number % 2 != 0 # 简写
new_list = filter(is_odd_number, range(100)) # 使用filter()函数过滤出序列中的偶数
print(new_list) # 返回一个迭代器对象
print(list(new_list)) # 使用list()函数将迭代器转换为列表
程序运行结果如下:
2.2 筛选指定范围的数据
定义学生列表,对 2020 年高考理科成绩进行筛选,获得成绩在 600 分到 700 分之间的学生信息,代码如下:
def find(item): # 创建函数
score = int(item[1])
return True if 600 <= score < 700 else False # 判断条件
list1 = [
("小明", 600), ("小刚", 601), ("小雅", 524),
("小旭", 714), ("小章", 624), ("小白", 635),
("小赵", 480), ("小高", 580), ("小王", 541), ("小琪", 680)
]
new_list = filter(find, list1) # 过滤序列中不符合条件的元素
list2 = list(new_list) # 使用list()函数转换为列表
print(list2) # 输出学生列表
print(f"600分以上: {len(list2)} 人")
程序运行结果如下:
2.3 筛选类型不是字符的元素
在一个集合中有一组数据,包括字符串、数字等,筛选出类型不是字符串的元素,代码如下:
a = {"AmoXiang", 123, 12.5, -2}
print(set(filter(lambda x: type(x) != str, a))) # {123, 12.5, -2}
2.4 取出字符串中的数字并转换为整型
取出一组注册信息中的数字,然后转换为整数。首先判断字符串是否为数字,然后使用 filter() 函数过滤数字,最后转换为整型输出,代码如下:
a1 = "ISVO20N2WTRJ4T0XXGQ5QWP9Z"
a2 = filter(str.isdigit, a1) # 过滤数字
a3 = list(a2) # 转换为列表
num = "".join(a3) # 连接列表
print(int(num)) # 转换为整型输出,输出: 2024059
2.5 去除序列中所有值为假的元素
如果将 filter() 函数的第一个参数 function 的值设置为 None,就会默认去除序列中所有值为假的元素,如 None、False、0、’’、()、[] 和 {}等,代码如下:
L = [1, '', 0, 'C', None, [0, 1, 2], False, 3.14, [], {'c': 1, 3: None}, {}]
f = filter(None, L) # 去除序列中为假的元素
print(list(f)) # [1, 'C', [0, 1, 2], 3.14, {'c': 1, 3: None}]
2.6 获取序列中被删除的元素
filter() 函数的返回值是一个可迭代对象,利用 for 循环将返回数据与原始数据比较,就可以判断出哪些元素被删除了。代码如下:
L = [1, '', 0, 'C', None, [0, 1, 2], False, 3.14, [], {'c': 1, 3: None}, {}]
f = list(filter(None, L))
print(f)
delete_data = L
for i in f:
if i in L:
delete_data.remove(i)
print(f"被删除的元素为: {delete_data}")
2.7 获取索引中以索引为基数所对应的元素
通过 filter() 和 lambda() 函数输出列表 list_a 中以索引为基数出现次数最多的元素。代码如下:
list_a = [12, 213, 22, 2, 2, 2, 22, 2, 2, 32]
li = filter(lambda x: x in list_a, [i for i in range(len(list_a))])
print(list(li)) # [2]
2.8 判断是否已经收藏某课程
在线课堂项目中,用户可以收藏喜欢的课程。如果之前已经收藏过该课程,则不用收藏。所以每次收藏之前,需要查询该课程是否已经收藏。代码如下:
class Course(object):
"""
课程类
"""
def __init__(self, course_id):
self.course_id = course_id
# 判断是否已经收藏
def is_favorite(course_id):
# 获取所有收藏的课程 id
course = list(filter(lambda c: c.course_id == course_id, course_list))
if len(course) > 0:
return True
return
if __name__ == '__main__':
course_list = []
for i in range(1, 10):
# 实例化9个课程类,并传递课程id
course_list.append(Course(i))
print(is_favorite(7)) # True
print(is_favorite(10)) # None
感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!
好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请点赞
、评论
、收藏
一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注
我哦!
本文地址:https://blog.csdn.net/xw1680/article/details/110849847