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

news2024/9/23 5:32:59

      在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 reduce

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

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

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

from functools import reduce

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

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

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

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

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

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

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

相关文章

【C++课程学习】:命名空间的理解(图文详解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f4f7;1.命名冲突 &#x1f4f7;2.重定义 &#x1f4f7;3.命名空间 &#x1f37a;命名空间可…

山东大学软件学院数据库实验1-9(全部)

目录 前言 实验代码 实验一 1-1 1-2 1-3 1-4 1-5 1-6 实验二 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-10 实验三 3-1 3-2 3-3 3-4 3-5 3-6 3-7 3-8 3-9 3-10 实验四 4-1 4-2 4-3 4-4 4-5 4-6 4-7 4-8 4-9 4-10 实验五 5-1…

CSRF跨站请求伪造实战

目录 一、定义 二、与XSS的区别 三、攻击要点 四、实战 一、定义 CSRF (Cross-site request forgery&#xff0c;跨站请求伪造)&#xff0c;攻击者利用服务器对用户的信任&#xff0c;从而欺骗受害者去服务器上执行受害者不知情的请求。在CSRF的攻击场景中&#xff0c;攻击…

移动云以深度融合之服务,令“大”智慧贯穿云端

移动云助力大模型&#xff0c;开拓创新领未来。 云计算——AI模型的推动器。 当前人工智能技术发展的现状和趋势&#xff0c;以及中国在人工智能领域的发展策略和成就。确实&#xff0c;以 ChatGPT 为代表的大型语言模型在自然语言处理、文本生成、对话系统等领域取得了显著的…

等价关系、偏序关系与哈斯图

一、等价关系的定义 设R是集合A上的一个二元关系&#xff0c;如果R满足自反性、对称性和传递性&#xff0c;则称R是一个等价关系。 二、等价类和商集 哪些元素有关系&#xff0c;就构成一个等价类。 所有等价类构成的集合就是商集。 集合的划分&#xff1a;就是对集合中的元…

Liunx系统中修改文件的创建时间以及访问时间

在Linux系统中&#xff0c;可以使用touch命令来修改文件的时间戳。以下是一些常用的touch命令选项&#xff1a; &#xff08;其实在MacOS中也适用&#xff09; 修改访问时间&#xff08;Access Time&#xff09;和修改时间&#xff08;Modification Time&#xff09;&#xf…

【代码随想录】动态规划经典题

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记&#xff0c;为了之后方便观看 做题步骤 含义公式初始化顺序检查 确定dp数组以及下标的含义递推公式dp数组如何初始化遍历顺序打印dp数组&#xff08;看哪里有问题&#xff09; 斐波那契数 c…

百亿级流量红包系统,如何做架构?(字节面试真题)

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的架构类/设计类的场景题&#xff1a; 1.如何设计高并发红包系统 &#xff0…

Linux 编译器gcc/g++使用

gcc/g同理 编译器运行过程 1. 预处理&#xff08;进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc&#xff0c;从现在开始进行程序的翻译&#xff0c;将预处理工作做完停下 2. 编译&#x…

电缆厂可视化:提升生产透明度与运营效率

图扑电缆厂可视化系统通过实时监控和数据分析&#xff0c;提高生产过程的透明度和可控性&#xff0c;优化资源配置和质量管理&#xff0c;显著提升运营效率和产品质量。

力扣739. 每日温度

Problem: 739. 每日温度 文章目录 题目描述思路复杂度Code 题目描述 思路 若本题目使用暴力法则会超时&#xff0c;故而使用单调栈解决&#xff1a; 1.创建结果数组res&#xff0c;和单调栈stack&#xff1b; 2.循环遍历数组temperatures&#xff1a; 2.1.若当stack不为空同时…

如何使用ssh将vscode 连接到服务器上,手把手指导

一、背景 我们在开发时&#xff0c;经常是window上安装一个vscode编辑器&#xff0c;去连接一个虚拟机上的linux&#xff0c;这里常用的是SSH协议&#xff0c;了解其中的操作非常必要。 二、SSH协议 SSH&#xff08;Secure Shell&#xff09;是一种安全协议&#xff0c;用于…

贝叶斯算法:机器学习中的“黄金法则”与性能提升之道

&#x1f440;传送门&#x1f440; &#x1f50d;机器学习概述&#x1f340;贝叶斯算法原理&#x1f680;贝叶斯算法的应用✨文本分类✨医疗系统 &#x1f496;贝叶斯算法优化✨贝叶斯算法优化的主要步骤✨贝叶斯算法优化的优点✨贝叶斯算法优化的局限性 &#x1f697;贝叶斯算…

【OceanBase诊断调优】—— 排查 IO 问题的方法

本文主要介绍 OceanBase 数据库 V4.x 版本中排查 IO 问题的方法以及 IO 相关的日志和视图。 IO 相关问题 -4013 内存爆、IoControl 模块内存泄漏 目前 IO 内存爆可能的原因如下&#xff0c;及相应的排查方法。 其他模块使用 IO 内存后未释放导致泄漏。 日志分析。 通过关键词…

kubectl自动补全插件

1. 安装bash completion yum install -y bash-completion 2. 修改配置补全脚本 在文件 ~/.bashrc 中导入(source)补全脚本: echo source <(kubectl completion bash) >> ~/.bashrc 将补全脚本添加到目录 /etc/bash_completion.d中: kubectl completion bash >…

vivado 设计连接性

设计连接性 IP集成商提供设计师协助&#xff0c;帮助您完成连接过程 设计。图3显示了MHS的一个示例&#xff0c;图4显示了设计帮助 可在IP集成商中获得 地址映射 在XPS中&#xff0c;无论主机访问从机IP&#xff0c;每个从机都有相同的地址。IP integrator为基于master的寻址提…

Wpf 使用 Prism 实战开发Day25

首页待办事项及备忘录添加功能 一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel 1.AddMemoViewModel 逻辑处理类&#xff0c;添加View视图数据要绑定的实体类 Model public class AddMemoViewModel :BindableBase,IDialogHostAware{public AddMemoV…

基于信号分解方法的机械故障诊断方法存在的问题

一方面&#xff0c;由于结构共振、测试噪声的干扰&#xff0c;为了确保分解精度&#xff0c;需要给定准确的参数初值(例如&#xff0c;瞬时频率)。研究人员通常认为零部件特征频率与通过传动比和驱动转速计算的理论值基本吻合&#xff0c;并基于理论值设置参数初值。事实上&…

matlab使用教程(78)—控制颜色图范围

1.控制颜色图范围 对于您创建的许多类型的可视化图形&#xff0c;MATLAB 默认将完整的数据范围映射到颜色图上。数据中的最小值映射到颜色图中的第一行&#xff0c;最大值映射到颜色图中的最后一行。所有中间值线性映射到颜色图的中间行。 这种默认映射适用于大部分情况&#x…

网络安全从入门到精通(特别篇I):应急响应之不同平台后门排查思路

Windows-后门-常规&权限维持&内存马 Linux-后门-常规&权限维持&Rootkit&内存马 Windows实验 1、常规MSF后门-分析检测 2、权限维持后门-分析检测 3、Web程序内存马-分析检测 常见工具集合: https://mp.weixin.qq.com/s/L3Lv06bFdUX_ZE4rS69aDg 常规…