Python中reduce函数详解
作者:走召大爷 发布时间:2022-09-03 12:26:33
标签:Python,reduce函数
reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。
reduce函数先从列表(或序列)中取出2个元素执行指定函数,并将输出结果与第3个元素传入函数,输出结果再与第4个元素传入函数,…,以此类推,直到列表每个元素都取完。
1 reduce用法
对列表元素求和,如果不用reduce,我们一般常用的方法是for循环:
def sum_func(arr):
if len(arr) <= 0:
return 0
else:
out = arr[0]
for v in arr[1:]:
out += v
return out
a = [1, 2, 3, 4, 5]
print(sum_func(a))
可以看到,代码量比较多,不够优雅。如果使用reduce,那么代码将非常简洁:
from functools import reduce
a = [1, 2, 3, 4, 5]
def add(x, y): return x + y
print(reduce(add, a))
输出结果为:
15
2 reduce与for循环性能对比
与内置函数map和filter不一样的是,在性能方面,reduce相比较for循环来说没有优势,甚至在实际测试中
reduce比for循环更慢。
from functools import reduce
import time
def test_for(arr):
if len(arr) <= 0:
return 0
out = arr[0]
for i in arr[1:]:
out += i
return out
def test_reduce(arr):
out = reduce(lambda x, y: x + y, arr)
return out
a = [i for i in range(100000)]
t1 = time.perf_counter()
test_for(a)
t2 = time.perf_counter()
test_reduce(a)
t3 = time.perf_counter()
print('for循环耗时:', (t2 - t1))
print('reduce耗时:', (t3 - t2))
输出结果如下:
for循环耗时: 0.009323899999999996
reduce耗时: 0.018477400000000005
因此,如果对性能要求苛刻,建议不用reduce, 如果希望代码更优雅而不在意耗时,可以用reduce。
来源:https://blog.csdn.net/huachao1001/article/details/124060003


猜你喜欢
- 本文实例讲述了Django rest framework工具包简单用法。分享给大家供大家参考,具体如下:Django rest framew
- Altova 公司的 XMLSPY 是个不可多得的好东西,它几乎可以开发所有的 XML 产品。最近用它来做 Schema
- 一、连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MySQL: 首先在打开DOS窗口,
- 有时会在存储过程中处理一些XML格式的数据,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 M
- 本文实例讲述了CentOS7系统搭建LAMP及更新PHP版本操作。分享给大家供大家参考,具体如下:搭建LAMP环境 用yum安装安装Apac
- $forceUpdate()的使用在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。那在vue框架中,如果data中有一个
- 命令行方式运行Python脚本在这个章节中,我们将写一些简单的数据库管理脚本。在此之前让我们来复习一下如何通过命令行方式执行Py
- 免责声明:本教程所有资源均来源于网络;仅用于学习交流,请勿用于任何商业行为;如需要,请使用正版授权;侵权联删。此篇教程通过无限重置试用期持续
- 在之前的博客 人脸识别经典算法一:特征脸方法(Eigenface)里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在
- 本篇文章将介绍在 Python 中将 hex 转换为 base64 的方法。使用 Python 中的 codecs 模块将 HEX 转换为
- 来源:http://stackoverflow.com/questions/3806562/ways-to-move-up-and-down
- 1.delete不能使自动编号返回为起始值。但是truncate能使自动增长的列的值返回为默认的种子 2.truncate只能一次清空,不能
- 具体代码如下所示:from operator import itemgetter #itemgetter用来去dict中的key,省去了使用
- SQL Server日期计算 通常,你需要获得当前日期和计算一些其他的
- 前言我们上一篇博客,给大家展现了一个动态的爱心。今天,我们给大家画一个圣诞树,我们一起来看看效果吧。效果展示我们先来看看最终的效果看看我们画
- 爬虫数据保存到mongoDB的方法:import pymongo# 首先需要注意,mongodb数据库存储的类型是以键值
- 相比较pandas,numpy并没有很直接的rolling方法,但是numpy 有一个技巧可以让NumPy在C代码内部执行这种循环。这是通过
- 之前需要做一些目标检测的训练,需要自己采集一些数据集,写了一个小demo来实现图片的采集使用方法:指定name的名称,name为分类的标签按
- 经常在网站上看到诸如www.abc.com/?news或者www.abc.com/?id=123这样的网址,一开始觉得很神秘,其实现在看多了
- 内容摘要:图片切换效果在网页制作中经常被使用,好的切换效果不仅增加了网站的实用行也提升了网站的趣味性。而图片切换方法有的使用flash来实现