【python基础】—函数式编程三个基本函数map()/filter()/reduce()

文章目录

  • 前言
  • 一、map()函数
  • 二、filter()函数
  • 三、reduce()函数


前言

map()、filter()、reduce()是python内置函数,它们提供了一种便捷的方式来处理可迭代对象中的元素,这些函数在许多编程任务中非常有用,包括数据转换,筛选和累积操作,熟练掌握这些函数的使用方式可以让python编程更加高效和简洁。
本文主要介绍三个基本函数:map()、filter()、reduce()的用法。


一、map()函数

  • map(function,iterable,…)

用于将一个函数应用到可迭代对象(如列表、元组等)的每个元素上,然后返回一个包含结果的新可迭代对象。

参数描述
function要应用于可迭代对象的函数。
iterable要进行映射操作的可迭代对象。

map()函数可以接受多个可迭代对象,但每个可迭代对象的元素必须一致,它将function应用于可迭代对象的对应元素,并返回一个迭代器,其中包含了所有映射后的结果。

举例1:将列表中的元素转为大写。

words=['abc','nju']
#list(map(upper,words)) #报错,更正
list(map(lambda word:word.upper(),words))
# 输出:
# ['ABC', 'NJU']# string.upper()函数被应用到words列表的每个元素上,将它们转为大写形式。

举例2:将列表中的元素乘以2。

lst=[3,2,5,8,1]
list(map(lambda x:x*2,lst))# 输出:
# [6, 4, 10, 16, 2]

举例3:将列表中的元素字符串类型转变为数值型。

lst=['12', '3.4', '567']
lst1=list(map(eval,lst))
print(lst1)# 输出:
# [12, 3.4, 567]

二、filter()函数

  • filter(function,iterable,…)

用于筛选可迭代对象中满足指定条件的元素,然后返回一个包含筛选结果的可迭代对象。

参数描述
function用于筛选元素的函数。该函数返回True或False。
iterable要进行筛选操作的可迭代对象。

filter()函数将function应用于iterable中的每个元素,并保留那些使function返回True的元素,生成一个包含筛选结果的迭代器。

举例1:筛选出偶数。

lst=[3,2,5,8,1]
list(filter(lambda x:x%2==0,lst))# 输出:
# [2, 8]

在上面这个例子中,lambda函数用于检查每个元素是否为偶数,然后filter()函数筛选出了所有满足条件的元素。

举例2:筛选出长度大于等于5的字符串

words=['hello','sodagreen','world','tomorrow','you','will']
long_words=list(filter(lambda words:len(words)>=5,words))
print(long_words)# 输出:
# ['hello', 'sodagreen', 'world', 'tomorrow']

三、reduce()函数

  • reduce(function, iterable[, initializer])

reduce()函数用于可迭代对象中的元素进行累积操作,从左到右依次应用指定的函数,将结果汇总为一个值,这在某些情况下非常有用,例如计算累积或查找最大/最小值。

参数描述
function用于累积操作的函数。该函数接受两个参数,并返回一个结果。
iterable要进行累积操作的可迭代对象。
initializer可选,累积的初始值。

reduce()函数将function应用于iterable中的元素,从左到右依次累积,将结果传递给下一个元素,如果提供了initializer,它将作为累积的初始值,否则iterable的第一个元素作为初始值。

举例1:计算列表中所有元素的和

from functools import reducelst=[1,2,3,4,5]
reduce(lambda x,y:x+y,lst)

举例2:计算列表中所有元素的累积乘积

from functools import reducelst=[1,2,3,4,5]
reduce(lambda x,y:x*y,lst)

举例3:查找列表中的最大值。

from functools import reducelst=[123,12,456,789]
reduce(lambda x,y:x if x>y else y,lst)

参考文档:
https://zhuanlan.zhihu.com/p/662737346

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

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

相关文章

​LeetCode解法汇总2670. 找出不同元素数目差数组

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个下…

从创新者到引领者:探索第四范式的AI之旅

大数据产业创新服务媒体 ——聚焦数据 改变商业 如今,人工智能已成为改变世界、驱动各行各业变革的核心源动力。在国内,有一些公司已走在前列,其中就包括北京第四范式智能技术股份有限公司,在AI这个赛道,他是一名创新…

Patch2QL:开源供应链漏洞挖掘和检测的新方向

背景 开源生态的上下游中,漏洞可能存在多种成因有渊源的其它缺陷,统称为“同源漏洞”,典型如: 上游代码复用缺陷。开源贡献者在实现功能相似的模块时,常复用已有模块代码或逻辑;当其中某个模块发现漏洞后…

聊聊 FTP、SFTP、FTPS

文章目录 FTP概述两种工作方式FTP、SFTP、FTPSSFTP和FTPS的区别命令详解SFTPFTP 个人简介 FTP概述 文件传送协议FTP(File Transfer Protocol)是TCP/IP协议簇中的一个成员,也是现在因特网上最广泛的文件传送协议。FTP协议包括两个部分,一个是FTP客户端&a…

java:java反编译工具--jd-gui

JD-GUI是一款反编译软件,JD分为JD-GUI、JD-Eclipse两种运行方式,JD-GUI是以单独的程序的方式运行,JD-Eclipse则是以一个Eclipse插件的方式运行。 官方下载地址: https://github.com/java-decompiler/jd-gui/releases 我这边下载…

Unity Shader 滚动进度条效果

Unity Shader 滚动进度条效果 前言项目场景布置导入图片修改场景设置修改图片尺寸即可调整进度 ASE连线 前言 UI要实现一个滚动进度,于是使用Shader制作一个。 项目 场景布置 导入图片 修改一下导入图片的格式,这样才能循环起来 WrapMode改为Repea…

提高 Code Review 质量的最佳实践

Code Review 是软件开发中至关重要的环节,它有助于确保代码质量、提高团队协作水平,同时也是一个学习和知识分享的机会。以下是一些提高 Code Review 质量的最佳实践: 1. 设置清晰的标准和目标 在进行 Code Review 之前,确保整个…

正点原子--STM32中断系统学习笔记(1)

1、什么是中断? 原子哥给出的概念是这样的:打断CPU正常执行的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。 当发生中断时,当前执行的程序会被暂时中止,进而进入中断处理函…

Qt案例 使用WINDOWS API的VDS.H库查询/修改 WINDOWS系统中硬盘分区/盘符信息(二)

简单介绍使用vds.h中的类和方法操作修改硬件/盘符的一些常使用的结构和函数,包括获取格式、删除、创建分区,设置磁盘文件类型,格式化卷等; 值得注意的是即使在vds.h库中像格式化卷这种都有多个方法,需要根据实际需求选…

Node: opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]异常处理

目录 一、问题描述二、问题分析三、解决方案方案一:你可以按照以下步骤来删除 NODE_OPTIONS 环境变量中的 --openssl-legacy-provider 选项:方案二:在package.json更改scripts方案三:降级 Node.js 版本 在进行前端项目开发时&…

Linux+服务器后台运行程序

在Linux服务器直接运行程序,程序运行的时间较长,程序经常会因为网络连接问题异常终止,一直盯着程序运行又费时费力,这时后台运行程序是更好的解决方式。But,如果服务器重启了,那所有进程都断掉了&#xff0…

关于v8垃圾回收机制以及与其相关联的知识点--还没整理版本

对于值类型b来说,就直接释放了其占用的内存,对于引用类型obj来说,销毁的只是变量obj对堆内存地址 1001 的引用,obj的值 { c: 3 } 依然存在于堆内存中。那么堆内存中的变量如何进行回收呢? V8的垃圾回收策略主要是基于…

2024年美国大学生数学建模竞赛思路与源代码【2024美赛D题】

B站账号,提前关注,会有直播:有为社的个人空间-有为社个人主页-哔哩哔哩视频 (bilibili.com) 题目 待定 问题一 思路 待定 模型 待定 程序 待定 问题二 待定 思路 待定 模型 待定 程序 待定

【Java 数据结构】栈和队列

栈和队列 1. 栈(Stack)1.1 概念1.2 栈的使用1.3 栈的模拟实现1.4 栈的应用场景1.5 概念区分 2. 队列(Queue)2.1 概念2.2 队列的使用2.3 队列模拟实现2.4 循环队列 3. 双端队列 (Deque)4. 面试题 1. 栈(Stack) 1.1 概念 栈:一种特殊的线性表,其只允许在…

自然语言处理,基于预训练语言模型的方法,车万翔,引言部分

文章目录 自然语言处理应用任务1. 信息抽取2. 情感分析3. 问答系统4. 机器翻译5. 对话系统 自然语言处理应用任务 1. 信息抽取 信息抽取(Information Extraction, IE),是从非结构化的文本中,抽取出结构化信息的过程,…

C++ 单一附合导线平差程序

一、以下图附合导线为例,图形如下: 二、第一步,读取测量数据,读取界面设计如下: 读取数据文本文件格式如下: (1)已知点坐标数据格式: (2)角度观测…

【C++杂货铺】详解类和对象 [下]

个人博客:代码菌-CSDN博客 专栏:C杂货铺_代码菌的博客-CSDN博客 目录 🌈前言🌈 📁 初始化列表(灰常重要) 📂 引入 📂 概念 📂 特性 📁 拓展构…

51单片机编程应用(C语言):数码管

目录 1.数码管原理 一位数码管引脚定义: 四位一体数码管: 多个数码管同时显示不同数字 51单片机的数码管的原理图 51单片机实现静态显示和动态显示 静态显示: 动态显示: 1.数码管原理 一位数码管引脚定义: 数码…

外包干了10个月,技术退步明显...

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【代码随想录】LC 349. 两个数组的交集

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记,如有侵权,立即删除。 一、题目 1、原题链接 349. 两个数组的交集 2、题目描述 二、解题报…