Python 进阶 (三) 函数式编程之 reduce()

python函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。🔊 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python 对函数式编程提供部分支持。由于 Python 允许使用变量,因此,Python 不是纯函数式编程语言。 阅读详情

一、前言

官方解释如下:

Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). The left argument, x, is the accumulated value and the right argument, y, is the update value from the sequence. If the optional initializer is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty. If initializer is not given and sequence contains only one item, the first item is returned.

格式: creduce (func, seq[, init()])

reduce()函数即为化简函数,它的执行过程为:每一次迭代,都将上一次的迭代结果(注:第一次为init元素,如果没有指定 init 则为 seq 的第一个元素)与下一个元素一同传入二元func函数中去执行。在reduce()函数中,init 是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取 seq 中的第一个元素。

二、举例

有一个序列集合,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个集合所有键的重复个数,例如 1 出现了两次,2 出现了两次等。大致的思路就是用字典存储,元素就是字典的 key,出现的次数就是字典的 value。方法依然很多第一种:for 循环判断

def statistics(lst):   dic = {}   for k in lst:     if not k in dic:       dic[k] = 1    else:       dic[k] +=1  return diclst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5] print(statistics(lst)) 

第二种:比较取巧的,先把列表用set方式去重,然后用列表的count方法。

def statistics2(lst):   m = set(lst)   dic = {}   for x in m:     dic[x] = lst.count(x)   return diclst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5] print statistics2(lst) 

第三种:用reduce方式

def statistics(dic,k):  if not k in dic:    dic[k] = 1  else:    dic[k] +=1  return diclst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]print reduce(statistics,lst,{}) #提供第三个参数,第一次,初始字典为空,作为statistics的第一个参数,然后遍历lst,作为第二个参数,然后将返回的字典集合作为下一次的第一个参数或者 d = {} d.extend(lst) print reduce(statistics,d) #不提供第三个参数,但是要在保证集合的第一个元素是一个字典对象,作为statistics的第一个参数,遍历集合依次作为第二个参数 

通过上面的例子发现,凡是要对一个集合进行操作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce方式实现。

Python中强大的函数: map()、filter() 和 reduce() 概述 Python 包含许多预定义的内置函数,最终用户可以通过简单地调用它们来使用它们。这些功能不仅使程序员的工作更轻松,而且有助于建立一个通用的编码环境。在本教程中,您将了解 Python 的三个最强大的函数:map()、filter() 和 reduce()。 函数式编程的三大支柱是 map、filter 和 reduce 函数。虽然 Python 不完全是一种函数式编程语言,但它确实有很多特性使它如此。本文讨论了 Python 中的 map、filter 和 reduce 函数,以及它们如何对应于函数 阅读详情

相关推荐

Python中的函数式编程:使用map、filter和reduce提升代码表达力

函数式编程是一种编程范式,通过将计算过程视为数学函数的组合,强调不可变性和无副作用,旨在提升代码的可读性、可维护性和表达力。Python作为一门多范式编程语言,充分支持函数式编程特性,尤其是通过内置的`map`、`filter`和`reduce`函数,使得开发者能够以简洁而高效的方式处理数据。本文将深入探讨Python中的函数式编程理念,详细解析`map`、`filter`和`reduce`的工作原理及其应用场景。通过大量的代码示例和中文注释,展示如何利用这些函数简化复杂的迭代和数据处理任务,提升代码的表达

一个被知识诅咒的人 900

Python进阶(三)函数式编程之reduce()

官方解释如下:格式:reduce()函数即为化简函数,它的执行过程为:每一次迭代,都将上一次的迭代结果(注:第一次为init元素,如果没有指定init则为seq的第一个元素)与下一个元素一同传入二元func函数中去执行。在reduce()函数中,init是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取seq中的第一个元素。

IT全栈 华强工作室 4万+

【Python函数式编程③】——Python高阶函数 map、reduce、filter

函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。

Python全栈系列 3648

Python进阶(三)-函数式编程之reduce()

分享一下我的偶像大神的人工智能教程!http://blog.youkuaiyun.com/jiangjunshow 也欢迎转载我的文章,转载请注明出处 https://blog.youkuaiyun.com/mm2zzyzzp Python进阶(三)-函数式编程之reduce()   官方解释如下:   Apply function of two arguments cu...

mm2zzyzzp的博客 150

SCDM学习笔记(5)

几何前处理后一般会获得几何的固体区域,然而当进行流体仿真的时候是对流体的区域进行计算的。因此,如何快速地从固体的几何模型获得流体的几何模型是一个重点问题。 流体问题一般可分为内流场与外流场问题,对于内流场问题,SCDM有专门的处理工具 工程图纸大致如下: 要创建这个几何的大致策略是画出截面的圆形,再画出轴线,通过扫掠的方式建立几何。 以上是mixing的国体区域,通过体积抽...

diyhoo的编程小屋 6357

gtsam官方文档: The new IMU Factor学习笔记

gtsam官方文档:The new IMU Factor 本文为gtsam imu预积分文档学习笔记,为gtsam基于切向量实现的imu预积分的理论基础。 导航状态 定义导航状态为 Xbn={Rbn,Pbn,Vbn}X^n_b=\{R^n_b,P^n_b,V^n_b\}Xbn​={Rbn​,Pbn​,Vbn​} 上角标n:导航(navigation)坐标系 下角标b:载体(body)坐标系 下文均省略上下标 矢量场与微分方程 对于导航问题我们用如下微分方程描述 X˙(t)=F(t,X)\dot X(t)

南柯一梦的博客 1608

2024年Python进阶(三)函数式编程之reduce()_python化简函数(1),2024年前端工作或更难找

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】96道前端面试题:常用算法面试题:内容主要包括HTML,CSS,JavaScript,浏览器,性能优化官方解释如下:格式:reduce()

2401_84435942的博客 767

Revit二次开发之双事件:空闲事件与DocumentChanged事件

对以下文章所展示的代码进行了修改,当前展示的代码可直接复制使用。 由于本人初学,下列语言为个人理解,如有错误请指正。   《引用1》中: 使用模态对话框,或者尽量保证事件在ExternalCommand的Execute函数或者ExternalApplication的OnStartup函数里面注册。 如果一定要使用非模态对话框,那么请使用ExternalEvent事件的Raise函数,强迫...

一个Revit二次开发的实习生 6147

最新Python进阶(三)函数式编程之reduce()_python化简函数,web前端开发怎样学

有一个序列集合,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个集合所有键的重复个数,例如1出现了两次,2出现了两次等。大致的思路就是用字典存储,元素就是字典的key,出现的次数就是字典的value。函数中,init是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取seq中的第一个元素。函数即为化简函数,它的执行过程为:每一次迭代,都将上一次的迭代结果(注:第一次为。对于定长和不定长的数据,HTTP 是怎么传输的?HTTP 中如何处理表单数据的提交?

2401_84413092的博客 293

别再手动画柜子了!用EPLAN导入STEP模型,5分钟搞定一个标准机柜

本文详细介绍了如何利用EPLAN Pro Panel的3D布局功能,快速将STEP模型转化为智能机柜宏,大幅提升电气工程设计效率。通过实战步骤解析,包括模型导入、智能解析、安装面定义及拼柜技巧,帮助工程师5分钟内完成标准机柜设计,避免传统手动建模的尺寸偏差问题。

weixin_26875109的博客 433

5G物理层基础知识

1、关于RB和RE (1) RB(Resource Block,资源块)频率上连续12个子载波,时域上一个slot(时隙,14个ofdm符号) (2) RE(Resource Element,资源单元)频率上一个子载波,及时域上一个ofdm符号 注意:协议规定,5G每个时隙(非扩展CP)的符号数为14个(扩展CP情况下每个时隙有12个符号),而LTE(非扩展CP)每个时隙的符号数为7个。 简单说:一个12X14的方格,大的整个叫一个RB,每一个小块叫一个RE。另外,一个RE可存放一个调制符号(mo.

qq_39074243的博客 2万+

Python 函数式编程进阶:map、filter、reduce

在函数式编程中,map、filter、reduce 是三种基本的高阶函数,它们在处理数据集合时起着至关重要的作用。这些函数有助于执行列表(或数组)的转换和操作,而不需要改变原始数据集合。它们通常用于简化算法,使得代码更加简洁、易于理解和维护。

二等碗 1926

ESP32与BH1750光照传感器结合使用的Web服务器案例

请注意,为了使代码正常工作,你需要将代码中的"你的WiFi网络名称"和"你的WiFi网络密码"替换为你自己的WiFi网络凭据。在代码中,我们首先导入了所需的库文件,包括Wire库用于I2C通信,BH1750库用于与光照传感器通信,WiFi库和WebServer库用于创建Web服务器。接下来,我们将编写一个Arduino代码来控制ESP32与BH1750的通信,并将读取到的光照强度值显示在Web服务器上。函数用于处理根路径的请求,其中我们读取光照传感器的值,并将其显示在返回的HTML页面中。

server_api196的博客 617

【Python进阶】Python中的函数式编程元素:map、filter和reduce的妙用

filter()函数就像是数据海洋中的滤网,它接受一个函数和一个序列,对序列中的每个元素应用该函数,如果函数返回True,则保留该元素;反之则丢弃。其基本语法形式为:print(even_numbers) # 输出:[2, 4, 6, 8]

weixin_44800376的博客 1484

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

51单片机 驱动有源/无源蜂鸣器+Proteus仿真

51单片机 驱动有源/无源蜂鸣器+Proteus仿真 相关篇《51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法》 电路搭建 采用NPN管驱动有源蜂鸣器电路 采用PNP管驱动有源蜂鸣器电路 采用PNP管驱动无源蜂鸣器 采用NPN管驱动无源蜂鸣器 Proteus元器件列表 实例代码 /************************************************************************************* * 实验现象:下载程序

perseverance51博客 2万+

Python 函数式编程之 filter()、map()和reduce()

上篇文章中说到lambda 的用法,再来看下其它几个类似功能的函数:filter()、map()、reduce()

(Π:1) 1470

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python函数式编程——map()、reduce()

原文链接 提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年Apache的Hadoop项目[2]正式将MapReduce纳入到项目中。 好吧,闲话少说,今天要介绍的是Python函数式编程中的另外两个内建函数map()和redu

Mr.Yan的专栏 1151

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python函数式编程map()、filter()和reduce()

三个函数可以理解是list、字符串的专属函数,即实现对列表、字符串每个元素操作,我们可以自己编写相同功能函数,不过python提供的更为高效。

weixin_37645480的博客 646

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python支持函数式编程吗_Python函数式编程(map()、filter()和reduce())详解

所谓函数式编程,是指代码中每一块都是不可变的,都由纯函数的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出。除此之外,函数式编程还具有一个特点,即允许把函数本身作为参数传入另一个函数,还允许返回一个函数。例如,想让列表中的元素值都变为原来的两倍,可以使用如下函数实现:def multiply_2(list):for index in range(0, len...

weixin_39807067的博客 279

Python中的函数式编程:lambda、map、reduce的使用场景

函数式编程通过lambdamap和reduce等工具,可以让你的代码更加简洁、易读和高效。在实际开发中,合理使用这些工具可以显著提升代码质量。在需要简洁函数定义的场景中优先使用lambda函数。在需要对数据集进行批量处理时使用map函数。在需要对数据集进行累积操作时使用reduce函数。阅读和分析优秀的Python代码,学习函数式编程的高级用法。希望这篇博客能够帮助你深入理解Python中的函数式编程,提升你的编程能力!如果你有任何问题或建议,欢迎在评论区留言!

司徒鸿的博客 1499

python函数式编程 filter() map() reduce()

python函数式编程 在一个函数中调用其它函数: filter() pyhon2中 filter()的使用: 其中 l1=[1,2,3,4,5,6,42,67] python3中 filter(function, iterable) 参数 function – 判断函数。 iterable – 可迭代对象。 返回值 返回一个迭代器对象 filter()的使用: #练习 返回 ...

qq_41805981的博客 213

python的函数_Python函数式编程——map()、reduce()

更多提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年Apache的Hadoop项目[2]正式将MapReduce纳入到项目中。好吧,闲话少说,今天要介绍的是Python函数式编程中的另外两个内建函数map()和reduce(),而不是Google的M...

weixin_39687422的博客 109

Python函数-函数式编程

文章目录1 函数式编程2 Python函数式编程2.1 map()2.2 filter()2.3 filter() 1 函数式编程 所谓函数式编程,是指代码中每一块都是不可变的(immutable),都由纯函数(pure function)的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。 def multiply_2(l): for index in range(0, len(l)): l[index] *= 2 r

weixin_40994552的博客 2205

详解Python函数式编程之map、reduce、filter

map()、reduce()、filter()是Python中很常用的几个函数,也是Python支持函数式编程的重要体现。不过,在Python 3.x中,reduce()不是内置函数,而是...

董付国的Python专栏 404
上一篇: Python 进阶 (二) 初识 Python 数据元素: 字典 & 时间
下一篇: Python 进阶 (四) 浅谈 Python 闭包
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值