博友们,你们好,很高兴能在这里和大家分享技术文章,我是 Amo Xiang,是一名在职企业员工,Amo 来源于上家公司的英文名,本意是 。作为刚入行几年互联网行业的小白,博主写博客一方面是为了记录自己的学习过程以及所犯的错误,更多的是希望能够帮助到很多处于起步阶段的萌新,让他们少走弯路。在编写文章时,参考了大量书籍及一些互联网大佬的资源,并结合了自己的工作经验,博主本着科学、严谨的态度、力求精益求精,但疏漏之处在所难免,敬请广大博友批评指正。博客主页:https://blog.csdn.net/xw1680?spm=1011.2124.3001.5113

目录

  • 1. filter() 函数的介绍
    • 1.1 功能
    • 1.2 语法
  • 2. filter() 函数的应用
    • 2.1 filter() 函数的基本应用
    • 2.2 筛选指定范围的数据
    • 2.3 筛选类型不是字符的元素
    • 2.4 取出字符串中的数字并转换为整型
    • 2.5 去除序列中所有值为假的元素
    • 2.6 获取序列中被删除的元素
    • 2.7 获取索引中以索引为基数所对应的元素
    • 2.8 判断是否已经收藏某课程

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