IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python代码:filter()函数 -> 正文阅读

[Python知识库]python代码:filter()函数

python代码:filter()函数

笔者的话:定义描述得比较抽象,可以从示例中加深对filter()函数的理解。

"""
filter(function or None, iterable) --> filter object

Return an iterator yielding those items of iterable for which function(item)
is true. If function is None, return the items that are true.
"""

# 功能
# filter() 函数用于 过滤 可迭代对象中不符合条件的元素,返回由符合条件的元素组成的新的迭代器。
# filter() 函数把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False,来决定保留或丢弃该元素。
# 参数说明:
# (1) function:用于实现判断的函数,可以为 None。
# (2) iterable:可迭代对象,如列表、range 对象等。
# (3) 返回值:返回一个迭代器对象。

# # 例子1:判断是否是奇数,True是奇数,False是偶数。
# def is_odd_number(number):
#     return (number % 2) != 0
#
# result = filter(is_odd_number, range(10))  # [1, 3, 5, 7, 9]
# print([i for i in result])
# # ----

# # 例子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)  # 输出学生列表 # [('小明', 600), ('小刚', 601), ('小章', 624), ('小白', 635), ('小琪', 680)]
# print(f"600分以上: {len(list2)} 人")  # 600分以上: 5 人
# # ----

# # 例子3:筛选类型不是字符的元素
# # 在一个集合中有一组数据,包括字符串、数字等,筛选出类型不是字符串的元素
# a = {"AmoXiang", 123, 12.5, -2}
# print(type(a))
# print(set(filter(lambda x: type(x) != str, a)))
# # ----

# # 例子4:取出字符串中的数字并转换为整型
# # 取出一组注册信息中的数字,然后转换为整数。首先判断字符串是否为数字,然后使用 filter() 函数过滤数字,最后转换为整型输出
# a1 = "ISVO0020N2WTRJ4T0XXGQ5QWP9Z"
# a2 = filter(str.isdigit, a1)  # 过滤数字
# a3 = list(a2)  # 转换为列表 # ['0', '0', '2', '0', '2', '4', '0', '5', '9']
# num = "".join(a3)  # 连接列表 # '002024059'
# print(int(num))  # 转换为整型输出 # 2024059
# # ----

# # 例子5:去除序列中所有值为假的元素
# # 如果将 filter() 函数的第一个参数 function 的值设置为 None,就会默认去除序列中所有值为假的元素,如 None、False、0、’’、()、[] 和 {}等
# data = [1, '', 0, 'C', None, [0, 1, 2], False, 3.14, [], {'c': 1, 3: None}, {}]
# result = filter(None, data)  # 去除序列中为假的元素
# print(list(result))  # [1, 'C', [0, 1, 2], 3.14, {'c': 1, 3: None}]
# # ----

# # 例子6:获取序列中被删除的元素
# # filter() 函数的返回值是一个可迭代对象,利用 for 循环将返回数据与原始数据比较,就可以判断出哪些元素被删除了。
# data = [1, '', 0, 'C', None, [0, 1, 2], False, 3.14, [], {'c': 1, 3: None}, {}]
# result = filter(None, data)  # 去除序列中为假的元素 # [1, 'C', [0, 1, 2], 3.14, {'c': 1, 3: None}]
# delete_data = data
# # for i in result:
# #     if i in data:
# #         delete_data.remove(i)
# [delete_data.remove(i) for i in result if i in data]  # 列表解析
# # print(f"被删除的元素为: {delete_data}")  # 被删除的元素为: ['', 0, None, False, [], {}]
# # ----

# # 例子7:
# # 举例来说,当索引值为1时,在data中查找是否有等于1的元素,如果有,就记录下该索引值。
# data = [1, 213, 22, 2, 2, 2, 22, 2, 2, 32]
# # len(data) = 10
# # range(len(data)) = range(0, 10), 即[0 - 10)
# # [i for i in range(len(data))], 即[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# result = filter(lambda x: x in data, [i for i in range(len(data))])  # [1, 2]
# print([i for i in result])
# # ----

# # 例子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 False
#
# 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))  # False
# # ----

# # 例子9:删除 None 或者空字符串
# def is_not_empty(s):
#     return s and len(s.strip()) > 0  # 或者直接return s and s.strip()
#
# result = filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])
# print(list(result))  # ['test', 'str', 'END']
# # ----

# # 例子10:请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
# # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# import math
#
# def is_sqr(x):
#     r = int(math.sqrt(x))
#     return r * r == x
#
# t = filter(is_sqr, range(1, 101))
# print(list(t))  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# # ----

# # 例子11:filter的func携带额外参数
# # 定义func的时候,携带多个参数,在filter调用时再使用一个lambda来完成额外参数的传递。
# data = [
#     {'name': 'jim', 'money': 133, 'home': 'ame'},
#     {'name': 'tom', 'money': 456, 'home': 'chin'}
# ]
#
# def func(v, a):
#     if v.get('name') == a:
#         return True
#     return False
#
# res = filter(lambda x: func(x, 'tom'), data)
# print(f'res:{list(res)}')  # res:[{'name': 'tom', 'money': 456, 'home': 'chin'}]
# # ----

# # 例子12:带有None函数的Python filter()示例 (Python filter() example with None function)
# # Notice that zero, empty string, False and None are filtered out because their boolean value is False.
# # 请注意,零,空字符串,False和None被过滤掉,因为它们的布尔值是False。
# data = (True, False, 1, 0, 0.0, 0.5, '', 'A', None)
# result = filter(None, data)
# print(list(result))  # [True, 1, 0.5, 'A']
# # ----

# 例子13: 定义一个 list 变量,里边放置若干学生的成绩信息(包括语文、数学和英语)。要求使用 filter() 函数筛选出偏科的学生名单。
# 如何认定学生是否偏科呢?符合如下其中一条的学生,将被视为偏科:
# 有 2 科成绩在 80 分以上,有一科在 60 分以下。
# 有 1 科成绩在 90 分以上,另外 2 科成绩都在 60 分以下。
# 有 1 科成绩在 90 分以上,但三科的平均分在 70 分以下。
#
# 实现代码如下:
scores = [("Emma", 89, 90, 59),
          ("Edith", 99, 49, 59),
          ("Sophia", 99, 60, 20),
          ("May", 40, 94, 59),
          ("Ashley", 89, 90, 59),
          ("Arny", 89, 90, 69),
          ("Lucy", 79, 90, 59),
          ("Gloria", 85, 90, 59),
          ("Abby", 89, 91, 90)]


def handle_filter(a):
    s = sorted(a[1:])  # 对三科成绩进行排序
    # 有 2 科成绩在 80 分以上,并且有 1 科在 60 分以下的
    if s[-2] > 80 and s[0] < 60:
        return True
    # 有 1 科成绩在 90 分以上,另外 2 科成绩都在 60 分以下
    if s[-1] > 90 and s[1] < 60:
        return True
    # 有 1 科成绩在 90 分以上, 且 3 科的平均分在 70 分以下
    if s[-2] > 90 and sum(s) / len(s) < 70:
        return True
    return False


result = list(filter(handle_filter, scores))
print(result)  # [('Emma', 89, 90, 59), ('Edith', 99, 49, 59), ('May', 40, 94, 59), ('Ashley', 89, 90, 59), ('Gloria', 85, 90, 59)]
# ----
 

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:45:38  更:2022-03-21 20:47:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:40:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码