5.4 python内置高阶函数之--map、reduce、filter、sorted

news2024/9/23 3:27:56
 高阶函数满足条件:
     1、 函数名被作为参数传给另外一个函数
     2、 函数返回值为另外一个函数(返回为自己,则为递归)

一、 高阶函数:map

 【 map函数】说明
 可以去查看源码, 会发现:map的__init__中有两个参数:func, *iterables
 第一个参数func: 即:函数名, 即实现功能的函数,可以是自行定义的,也可以是内置支持的
 第二个参数iterables: 即:序列对象,如:str、list、等

【  案例说明】
 list1 = [1,2,3,4,5,6,7,8,9]
 要实现这样一个功能: 遍历list1每一个元素,并进行元素本身相乘2次生成新的列表,即:
 list2 = [1, 4, 9, 16, 25, 36, 49, 64, 81]
 【注】: 本次会稍带复习上一节内容: 列表生成式、生成器、迭代器

实现方法1: map

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1、最初级实现:
list2 = []
for one in list1:
    list2.append(one * one)

# 2、借助列表生成器实现:
list2 = [one * one for one in list1]

# 3、 借助生成器 --与列表生成器实现复杂度大差不差,且无必要
list2 = (one * one for one in list1)


# 4、 借助迭代器实现
def func2(list1: list):
    for one_ele in list1:
        yield one_ele * one_ele


list2 = func2(list1)


# 5、借助map函数实现
def funcx(num):
    return num * num


list2 = map(funcx, list1)
print(list2)

通过map函数实现结果打印,我们会发现返回的是一个map实例对象
在这里插入图片描述
那么如果想要查看到所有元素,怎么处理呢? 这里就用到了 list函数
在这里插入图片描述
此案例可能大家会觉着还不如列表表达式实现方便呢? 就不需要map了吧? 当前案例只是说明用法, 一般情况map也不会应用在这么简单的场景中, 比如如果要进行特别多逻辑的特殊处理时,可能列表表达式就不足以支持了

实现方法2: map、lamda

像上述funcx()函数实现比较简单, 这种我们也可以使用内置的lamda来替代
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 6、借助map函数&、lamda函数实现
func = lambda x: x ** 2
list2 = list(map(func, list1))
print(list2)

在这里插入图片描述

二、 高阶函数: reduce

【 函数说明】 累计计算
     reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数
     reduce把结果继续和序列的下一个元素做累积计算
    
 【案例说明】求列表元素和
    如: list1 = [1,2,3,4,5,6,7,8,9].    sum =45
from functools import reduce

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1、普通实现算法
sum = 0
for one_ele in list1:
    sum += one_ele


# 2、 reduce用法
def add(x, y):
    return x + y


sum1 = reduce(add, list1)
print(sum)

在这里插入图片描述

三、 高阶函数: filter

    函数说明:
    1、 实现功能:filter()函数用于过滤实现符合条件的“筛选”内容(True)
    2、 与map区别点:filter()把传入的函数依次作用于每个元素,根据返回值(boolean)来确定要保留的数据(return结果为True)
    3、filter()函数返回的是一个Iterator,如果涉及计算结果,需要用list()函数获得所有结果并返回list
"""获取0-100内既是2又是3的倍数数据"""

def func(x):
    return x % 2 == 0 and x % 3 == 0


all_data = list(filter(func, range(1, 100)))
print(all_data)

在这里插入图片描述

四、 高阶函数: sorted

函数功能:用于排序
函数参数说明:  sorted(iterable, key=None, reverse=False)  
第1个参数: iterable 表示指定的序列
第2个参数: key 参数可以自定义排序规则,可以多项
第3个参数: reverse 参数指定以升序(False,默认)还是降序(True)进行排序
函数使用场景可参考如下案例说明 &代码是可以直接运行的:

1、简单排序-列表排序-无key

【备注】 元组也是同样使用方法,用法一致
list1 = [1, 4, 9, 17, 3, 8, 12, 34, 0, 3, 7, 4]

print(sorted(list1))

在这里插入图片描述

2、 较复杂排序, key字段

dict1 = [{"name": "Lujier1", "age": 19, "score": 99, "sex": "Female"},
         {"name": "Lujier2", "age": 21, "score": 102, "sex": "Female"},
         {"name": "Lujier3", "age": 22, "score": 132, "sex": "male"},
         {"name": "Lujier4", "age": 21, "score": 97, "sex": "male"},
         {"name": "Lujier5", "age": 32, "score": 103, "sex": "male"}]

# 按照score升序排列
print(sorted(dict1, key=lambda x: x['score']))
# 按照score降序排列
print(sorted(dict1, key=lambda x: -x['score']))
print(sorted(dict1, key=lambda x: x['score'], reverse=True))


# 按照age升序排序, 按照score降序展示(即:如果age相同,则高分在前)
print(sorted(dict1, key=lambda x: (x['age'], -x['score'])))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

deeplabv3+源码之慢慢解析 第二章datasets文件夹(3)cityscapes.py--Cityscapes类

系列文章目录(更新中) 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之…

MyBatis-Plus学习总结

目录 1.MyBatis-Plus介绍 2.第一个MyBatis-Plus程序 3.配置日志输出 4. 主键生成策略 4.1 ID_WORKER -- 雪花算法 4.2 主键生成策略 -- 详情 5. 自动填充 6.MyBatis-Plus的CRUD 6.1 insert -- 插入 6.2 delete -- 删除 6.3 update -- 更新 6.4 select -- 查询 7. …

Nacos报错Could not resolve placeholder ‘order.name‘ in value “${order.name}“怎么解决?

出现这个原因有两个: 1.首先在Nacos配置中心,写入yml配置文件的数据和后端服务在取数据的时候名称不一致 如下图,现在我的配置中心为order-service 看看其中的文件内容信息: 再看看后端是怎么取的: 看出上面错误了吗…

Windows Cluster 投票权问题

在日常运维中,如果你的 Windows Cluster 需要升级、重启、意外宕机、网络中断等,你知道该怎么操作才能保证集群的可用性吗?按什么样的顺序怎样关闭或启动集群节点吗?怎么快速恢复你的集群呢? 接下来,我们就…

【C++ 重要知识点总结】STL字符串向量

字符串、向量和数组 这里讲的是 C中的处理,置于 C 中的字符串向量和数组,可以自己去复习。 1 命名空间的 using 声明 基本使用 //独立使用名字 using namespace::name; //声明空间 using namespace使用规则 头文件中不应包含 using 声明。因为会破坏包…

组合数学相关知识总结(适合复习用)

全排列 例子: n n n 个数取 m m m 个数有序排放 通项公式: A n m ( P n m ) n ∗ ( n − 1 ) ∗ ( n − 2 ) ∗ ⋅ ⋅ ⋅ ∗ ( n − m 1 ) n ! ( n − m ) ! A_n^m(P_n^m)n*(n-1)*(n-2)**(n-m1) \frac{n!}{(n-m)!} Anm​(Pnm​)n∗(n−1)∗(n−2)∗…

[QT编程系列-12]:QT快速学习 - 0 - 主要内容

第0章 主要内容 0.1 QT的主要内容 附录: Qt 是一个功能强大的应用程序开发框架,涵盖了广泛的知识点。以下是一些常见的 Qt 知识点: 基本概念和特性:了解 Qt 的基本概念,如信号和槽、事件处理、对象模型、元对象系统等…

Python基础合集 练习27 (turtle函数使用)

import turtle as t 画笔控制工具 t.penup() 表示画笔抬起 海龟在天上飞 不能直接形成图形 t.pendown() 画笔落下 海龟降下来 t.pensize(15) 也可以用 t.width() 画笔宽度 t.pencolor(“red”) 画笔颜色 为颜色字符串或rgb值 运动控制函数 控制行进方向、走曲线或…

二进制文件的Python写入

二进制文件的Python编写 这么基础的东西,必然用内置的就好 二进制文件的Python读写 重要提示 p.s. 1 >>> bHello World.decode() "Hello World" True >>> example import struct with open(binary_file.bin, wb) as file:data b…

【cfengDB】自己实现数据库第0节 ---整体介绍及事务管理层实现

LearnProj 内容管理 MySQL系统结构一条SQL执行流程 cfengDB整体结构事务管理TM模块TID文件规则定义文件读写 -- NIORandomAccessFile、FileChannel、ByteBuffer接口实现文件合法检测begin()commit(tid)rollback(tid)tid文件创建 本文作为数工底层的项目CfengDB开始篇章&#xf…

vue 升级3 +vite+antdv4

目录 一、安装包相关升级 二、vite.config 三、 入口文件修改 四、App.vue 及相关升级 五、路由 六、状态管理VUEX 一、安装包相关升级 升级pakage.json相关安装包 vue2插件vue3替换插件vue2使用vue3使用vue-ls vuex-persistedstate或vuex-persistVue.ls.get() Vue.ls.…

C++ 多线程学习总结

C 多线程 创建线程 thread jion与detach方式的区别 jion方式&#xff1a;必须等待创建并启动的子线程任务执行完毕&#xff0c;才会继续往下执行。 示例&#xff1a; #include <stdio.h> #include <unistd.h> #include <iostream> #include <string&g…

【企业架构实践】要避免的 7 个企业架构错误

颠覆性时代需要有弹性、前瞻性的企业架构。不要让错误的框架破坏您的组织实现当前和未来目标的能力。 企业架构为成功的业务 IT 计划奠定了基础。如果设计和实施得当&#xff0c;企业架构将帮助业务领导者实现他们的目标&#xff0c;使组织变得更具响应性、效率和竞争力。 不幸…

matlab使用教程(2)—数组索引、工作区与字符

1数组索引 MATLAB 中的每个变量都是一个可包含许多数字的数组。如果要访问数组的选定元素&#xff0c;请使用索引。 例如&#xff0c;假设有 44 矩阵 A &#xff1a; A [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] A 44 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 引…

python selenium.webdriver 爬取政策文件

文章目录 获取文章链接批量爬取政策文件应用selenium爬取文件信息数据处理导出为excel 获取文章链接 获取中央人民政府网站链接&#xff0c;进入国务院政策文件库&#xff0c;分为国务院文件和部门文件&#xff08;发改委、工信部、交通运输部、市场监督局、商务部等&#xff…

JavaScript 中 五种迭代数组的方法 every some map filter forEach

JavaScript 中 五种迭代数组的方法 every some map filter forEach 1.every 和 some2.filter (重点常用)3.map (灵活常用&#xff09;4.forEach (重点常用) ECMAScript 提供了 5个对数组的迭代方法 1.every() 2.some() 3.filter() 4.forEach() 5.map() 1.every 和 some every…

串联型PI和并联型PI调节器的比较

一、PI调节器的种类 图3-4 仿真波形变化情况&#xff08;串联型PI调节器&#xff0c;1500r/min&#xff09; 从图3-1到3-4比较可知&#xff0c;与并联型PI调节器相比&#xff0c;串联型PI调节器的超调量很小&#xff08;速度环&#xff09;&#xff0c;且动态过程时间短&…

从新的角度看待大模型微调

一、前言 一切要从最近大火的Lora(《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》&#xff09;说起&#xff0c;该文章在ICLR2022中提出。说的是利用低秩适配(low-rank adaptation)的方法&#xff0c;可以在使用大模型适配下游任务时只需要训练少量的参数即可达到一…

【SQL应知应会】表分区(二)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 前言一、分区表1.非分区表2.分区…

【运维】第03讲(下):Nginx 负载均衡常见架构及问题解析

Nginx 负载均衡常见问题 那么,Nginx 负载均衡的通常配置会出现哪些问题呢?这里列出几种比较常见的问题: 客户端 IP 地址获取问题域名携带问题负载均衡导致 session 丢失问题动态负载均衡问题真实的 Realserver 状态检测接下来,我们就重点讲解下 Nginx 作为负载均衡的这几个…