python内置函数map/filter/reduce详解

      在Python中,map(), filter(), 和 reduce() 是内置的高级函数(实际是class),用于处理可迭代对象(如列表、元组等)的元素。这些函数通常与lambda函数一起使用,以简洁地表达常见的操作。下面我将分别解释这三个函数。

1. map()函数

map() 函数将一个函数应用于一个或多个可迭代对象的每个元素,并返回一个迭代器,该迭代器包含函数应用于每个元素的结果。

以下是builtins.map的源码:__init__()函数可以看出需要传入一个函数func和至少一个可迭代对象。

map(function, iterable, ...)

  • function:接收一个或多个参数的函数。
  • iterable:一个或多个可迭代对象,如列表、元组、字符串等。

注意事项:

  • map() 函数返回的是一个迭代器,如果你需要一个列表或其他可迭代对象,你需要使用 list() 或其他相应的函数来转换它。
  • 当使用 map() 函数时,请确保传递给它的函数能够正确地处理可迭代对象的元素。如果函数引发异常,则 map() 将停止迭代。

示例

传入一个可迭代对象

#通过map函数 返回经过平方计算后的结果
value1 = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
#之前文章讲过使用list(),将可迭代对象转为列表
print(list(value1))
#结果
[1, 4, 9, 16, 25]

传入多个可迭代对象

#通过map函数 返回两个可迭代对象中每个对应位置元素的乘积平方
value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5],(2,4,6,8,10))
#之前文章讲过使用list(),将可迭代对象转为列表
print(list(value2))
#结果
[2, 8, 18, 32, 50]

但是注意传入的元素个数与lambda需要的参数个数要一致,否则会报错

比如上面的例子我们只传入一个迭代对象,程序执行后会报错

value2 = map(lambda x,y: x*y, [1, 2, 3, 4, 5])
print(list(value2))
#结果报错
TypeError: <lambda>() missing 1 required positional argument: 'y'

2. filter()

filter() 函数使用一个函数作为条件,并返回一个迭代器,该迭代器包含所有使该函数返回True的可迭代对象的元素。

以下是builtins.filter的源码:__init__()函数可以看出需要传入一个函数func和一个可迭代对象。

filter(function, iterable)

  • function:一个函数,它接受一个参数并返回一个布尔值。
  • iterable:一个可迭代对象,如列表、元组、字符串等。

示例

传入一个可迭代对象,使用lambda函数获取被2整除的数

numbers = [10, 3, 9, 8, 6]
filternumbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filternumbers))
#结果
[10, 8, 6]

3. reduce()

reduce() 函数将一个二元操作符(或函数)连续地应用于一个可迭代对象的元素,从而将其减少为单个值。python3的版本reduce() 函数在Python的functools 模块中,使用时需要先导入。

reduce(function, sequence, initial=_initial_missing)

  • function:该函数接受两个参数并返回一个值。
  • sequence:一个可迭代对象,如列表、元组等。
  • initial(可选):传入该值表示操作的初始值。如果保持默认值,则使用可迭代对象的第一个元素作为初始值。

示例

1) 将可迭代对象的值相加

from functools import reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers)
print(sumnumbers) 
# 输出: 15

当然像上面这种简单的例子,用sum(numbers)函数更简单。

2) 传入1个初始值作为第1个元素

from functools import reducenumbers = [1, 2, 3, 4, 5]
sumnumbers = reduce(lambda x, y: x + y, numbers,6)
print(sumnumbers) 
# 输出: 21

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

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

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

相关文章

mac安装git心得

我是买了一个新的mac但是当我安装git的时候遇见了很多问题 安装不上各种报错 首先我们直接打开git网址&#xff0c;然后打开mac的命令提示&#xff0c;里边输入git大概1g左右&#xff0c;下载完了直接好了

持续总结中!2024年面试必问 20 道 Redis面试题(七)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Redis面试题&#xff08;六&#xff09;-CSDN博客 十三、Redis集群的主从复制模型是怎样的&#xff1f; Redis集群的主从复制模型是一种高可用性架构&#xff0c;它允许数据在多个节点之间进行复制&#x…

pod 之资源限制 与健康检查

目录 一 资源限制 1&#xff0c;资源限制是什么 2&#xff0c;资源限制的 标准 3&#xff0c; k8s 创pod 显示 OOMKILLED 是 requests小了 还是limits小了 4&#xff0c; Pod 和 容器 的资源请求和限制 &#xff08;yaml&#xff09; 5&#xff0c; CPU 资源单位 6&…

xgboost项目实战-保险赔偿额预测与信用卡评分预测001

目录 算法代码 原理 算法流程 xgb.train中的参数介绍 params min_child_weight gamma 技巧 算法代码 代码获取方式&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1QV7nMC5ds5wSh-M9kuiwew?pwdx48l 提取码&#xff1a;x48l 特征直方图统计&#xff1a; fig, …

这次泰迪杯应该不能答辩

检查了里面还有没修改完的&#xff0c;只能但愿没看到 魔改了又去投水赛&#xff0c;理论加应用

各大模型厂商API使用:百度、阿里、豆包、kimi、deepseek

百度ERNIE(支持requests接口) ERNIE Speed、ERNIE Lite免费 免费测试下来模型ernie_speed输出吞吐量计算20-30来个,“{length/cost} tokens/s” 输出总长度/耗时 https://qianfan.cloud.baidu.com/ 文档: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/dltgsna1o a…

JavaScript-函数的使用

函数的语法 函数就是包裹在花括号里面的代码&#xff0c;当用户需要多次使用 某个代码时&#xff0c;可以用函数包裹住这个代码&#xff0c;然后调用函数即可 比如js自己封装好的函数doucument.write(),console.log()等等 function functionname() {/*代码块*/ } 函数的组成部…

Flink Kylinv10 java8 Flink镜像制作

1&#xff09;基于麒麟v10版本制作JDK8基础镜像在这里插入代码片 FROM kylinv10/kylin:b09 RUN set -ex; \dnf install -y wget java-1.8.0-openjdk java-1.8.0-openjdk-devel tar; \yum clean all RUN java -version CMD ["echo", "kylinv10 JDK 8 image is …

智能进化:深度学习与进化计算的融合艺术

《进化深度学习》这本书深入探索了进化计算&#xff08;EC&#xff09;在深度学习领域的应用&#xff0c;为读者提供了一套丰富而实用的技术工具&#xff0c;这些工具可以贯穿深度学习的整个过程&#xff0c;助力研究者们解决各种复杂的问题。书中不仅详细介绍了遗传算法和进化…

【嵌入式DIY实例】-OLED显示DS1307/DS3231实时时钟

OLED显示DS1307/DS3231实时时钟 文章目录 OLED显示DS1307/DS3231实时时钟1、DS1307/DS1321介绍2、硬件准备3、代码实现本文将展示了如何使用ESP8266 NodeMCU开发板、DS3231 RTC 芯片和 SSD1306 OLED 显示屏(12864 像素)构建实时时钟。 DS3231 RTC有一个内置的温度传感器,我们…

力扣:344. 反转字符串

344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s ["…

Win11禁用数字强制签名:解放硬件选择,自由安装应用

工具原料&#xff1a; 操作系统版本&#xff1a;Windows 11 品牌型号&#xff1a;任意电脑或手机品牌型号 软件版本&#xff1a;任意版本的Win11操作系统 一、禁用数字强制签名的方法 方法一&#xff1a;使用高级启动选项 在Win11中&#xff0c;可以通过高级启动选项来禁…

怎么理解直接程序控制和中断方式?

直接程序控制 看完之后是不是依然一头雾水&#xff1f;来看下面两个例子 无条件传送 假设你正在使用键盘打字。当你敲击键盘上的一个键时&#xff0c;键盘会立即产生一个信号&#xff08;即输入数据&#xff09;&#xff0c;并且这个信号会立即被电脑接收。在这个过程中&…

比较两列数据

点其中一个数据 删掉S&#xff0c;回车 大的标红

v-cloak 用于在 Vue 实例渲染完成之前隐藏绑定的元素

如果你是后端开发者&#xff08;php&#xff09;&#xff0c;在接触一些vue2开发的后台时&#xff0c;会发现有这段代码&#xff1a; # CDN <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> # 或 <script src"https://cd…

三十六计的笔记

系列文章目录 三十六计的笔记 文章目录 系列文章目录1、瞒天过海2、围魏救赵3、借刀杀人4、以逸待劳5、趁火打劫6、声东击西7、无中生有8、暗渡陈仓9、隔岸观火10、笑里藏刀11、李代桃僵12、顺手牵羊13、打草惊蛇14、借尸还魂15、调虎离山16、欲擒故纵17、抛砖引玉18、擒贼擒王…

MongoDB 单点 Docker 启动及其持久化配置

MongoDB 单点 Docker 启动及其持久化配置 Docker Image Version mongodb/mongodb-community-server:5.0-ubuntu2004 单点删除 docker rm -f mongo-single单点启动 docker run -d --name mongo-single --log-driverjson-file \ --log-opt max-size100m --log-opt max-file3…

9.3 Go语言入门(变量声明和函数调用)

Go语言入门&#xff08;变量声明和函数调用&#xff09; 目录二、变量声明和函数调用1. 变量声明1.1 使用 var 关键字声明1.2 简短声明1.3 零值1.4 常量 2. 函数调用2.1 函数定义2.2 多个返回值2.3 命名返回值2.4 可变参数2.5 匿名函数和闭包 目录 Go 语言&#xff08;Golang&a…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

安全性基础知识

文章目录 1.计算机安全概述2.网络攻击3.两类密码体制4.数字签名与消息摘要5.网络安全 1.计算机安全概述 计算机安全可包括安全管理、通信与网络安全、密码学、安全体系及模型、容错与容灾、涉及安全的应用程序及系统开发、法律、犯罪及道德规范等领域。 信息安全的5个基本要素…