网易首页 > 网易号 > 正文 申请入驻

Python 内置函数:reduce()

0
分享至

在数据处理和函数式编程中,“归约”(reduce)是一种重要操作,主要用于将序列中的所有元素,按照某种逻辑逐步合并为一个最终值。

Python 提供的 reduce() 函数正是实现这一过程的工具。

需要注意的是,在 Python 3 中,reduce() 已被移到 模块中,因此使用时需要导入。

它依然是一个强大高效的函数,常用于累加、连乘、最大值、字符串拼接等场景。

一、函数语法

from functools import reduce

reduce(function, iterable, initializer=None)

参数:

function:一个二元函数(接收两个参数)。第一个参数是累计值(accumulator),第二个参数是当前元素,用于指定如何合并。

iterable:可迭代对象(如列表、元组、字符串等)。

initializer:可选,初始值。如果提供,则会作为第一个参数与序列的第一个元素进行运算。如果不提供,则序列的第一个元素会作为初始累计值。

返回值:

返回归约后的单一结果值。

二、基本用法举例

1、计算累加和

from functools import reduce

data = [1, 2, 3, 4]
result = reduce(lambda x, y: x + y, data)
print(result)  # 输出:10

过程解释:

(((1 + 2) + 3) + 4) = 10

2、连乘计算阶乘

from functools import reduce

result = reduce(lambda x, y: x * y, range(1, 6))  # 1*2*3*4*5
print(result)  # 输出:120

3、使用初始值

from functools import reduce

result = reduce(lambda x, y: x + y, [1, 2, 3], 10)
print(result)  # 输出:16(10 + 1 + 2 + 3)

三、进阶技巧

1、拼接字符串

from functools import reduce

words = ['mediaTEA', 'is', 'fun']
sentence = reduce(lambda x, y: x + ' ' + y, words)
print(sentence)  # 输出:mediaTEA is fun

2、查找最大值

from functools import reduce

data = [8, 3, 15, 6]
maximum = reduce(lambda x, y: x if x > y else y, data)
print(maximum)  # 输出:15

3、自定义归约逻辑

例如:每个元素平方后求和

from functools import reduce

data = [1, 2, 3, 4]
result = reduce(lambda acc, x: acc + x**2, data, 0)
print(result)  # 输出:30(1²+2²+3²+4²)

四、reduce 的特性

1、逐步迭代合并

每次仅取累计值和下一个元素进行运算,最终得到单一结果。

2、完整执行,不可随意中断

不像 for 循环能用 break 提前退出,reduce() 会对序列执行到末尾(除非函数逻辑抛出异常)。

3、函数必须是二元的

function 必须接收两个参数:累计值与当前元素。

4、不保留中间值

reduce() 仅返回最终结果。如果需要保留每一步的中间值,应使用 itertools.accumulate()。

五、常见错误和注意事项

1、必须导入

from functools import reduce

否则会报 NameError。

2、空序列错误(没有初始值)

reduce(lambda x, y: x + y, [])  # TypeError

解决方法:提供初始值

reduce(lambda x, y: x + y, [], 0)  # 输出:0

3、函数必须接受两个参数

错误示例(只有一个参数):

# 错误:lambda 只有一个参数
reduce(lambda x: x * x, [1, 2, 3])  
# TypeError: () takes 1 positional argument but 2 were given

六、补充说明

在很多场景下,用内置函数会更直观高效:

sum([1,2,3]) 代替 reduce(lambda x,y: x+y, [1,2,3])。

max(data)、min(data) 代替手写 reduce。

' '.join(words) 代替字符串拼接。

如果需要保留中间结果,推荐使用 itertools.accumulate() :

from itertools import accumulate

lst = list(accumulate([1, 2, 3, 4], lambda x, y: x + y))
print(lst)    # [1, 3, 6, 10]

小结

reduce() 是函数式编程中的重要工具,用于将序列逐步“归约”为单一结果。

常用于:累加或连乘等数学运算、最大值或最小值查找以及字符串拼接或自定义合并逻辑等。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
大儿子17岁,双胞胎二儿子三儿子16岁,才38岁的她美得让人羡慕!

大儿子17岁,双胞胎二儿子三儿子16岁,才38岁的她美得让人羡慕!

上官晚安
2026-01-14 17:16:14
岳家军58将排名,岳飞排第四档,岳云才第二档,第一档都有谁?

岳家军58将排名,岳飞排第四档,岳云才第二档,第一档都有谁?

鹤羽说个事
2026-01-14 15:34:23
名将止步首轮,大满贯资格赛真难打!

名将止步首轮,大满贯资格赛真难打!

网球之家
2026-01-14 12:57:00
广州放开摩托加油,就离解禁不远了?

广州放开摩托加油,就离解禁不远了?

楼市前线
2026-01-14 21:01:16
大误判,袁绍不懂底层人,董卓不懂上层人

大误判,袁绍不懂底层人,董卓不懂上层人

掠影后有感
2026-01-10 13:59:33
犹太财团又要开始卖国了,大规模资产转移后,贝莱德:美国没救了

犹太财团又要开始卖国了,大规模资产转移后,贝莱德:美国没救了

老范谈史
2026-01-13 20:15:38
篡改网友视频称牙膏能修牙填缝,狂卖70万单!高露洁失控了……

篡改网友视频称牙膏能修牙填缝,狂卖70万单!高露洁失控了……

柴狗夫斯基
2026-01-13 10:59:40
DeepSeek梁文锋喊话罗永浩:靠嘴年入过亿,为啥非得做科技?

DeepSeek梁文锋喊话罗永浩:靠嘴年入过亿,为啥非得做科技?

雷科技
2026-01-14 15:31:09
乔丹的控球技术什么水平?

乔丹的控球技术什么水平?

董先森爱篮球
2026-01-15 08:29:45
科尔:理解为什么开拓者首轮选杨瀚森 他有机会成为非常出色球员

科尔:理解为什么开拓者首轮选杨瀚森 他有机会成为非常出色球员

罗说NBA
2026-01-14 12:01:54
我国最“不靠谱”的三位专家,在央视“大放厥词”,却爆火34年

我国最“不靠谱”的三位专家,在央视“大放厥词”,却爆火34年

有范又有料
2026-01-13 09:21:31
恭喜俄罗斯与乌克兰,打了近4年,终于打成了全世界都喜欢的样子

恭喜俄罗斯与乌克兰,打了近4年,终于打成了全世界都喜欢的样子

水泥土的搞笑
2026-01-15 07:23:16
中国首批顶流网红:已淡出圈子,每月仅工作两天,实现财富自由

中国首批顶流网红:已淡出圈子,每月仅工作两天,实现财富自由

陈意小可爱
2026-01-15 06:05:40
中戏院长主动投案!闫学晶儿子学籍疑云反转?背后牵扯不简单?

中戏院长主动投案!闫学晶儿子学籍疑云反转?背后牵扯不简单?

复转这些年
2026-01-14 18:39:16
教师工作琐记:教师群体之间的霸凌示范,我见过很多,你呢?

教师工作琐记:教师群体之间的霸凌示范,我见过很多,你呢?

双旗镇客栈
2026-01-13 21:56:00
中海油原总经理李勇坦白受贿细节:外国代理商开车来,拿个箱子给钱

中海油原总经理李勇坦白受贿细节:外国代理商开车来,拿个箱子给钱

澎湃新闻
2026-01-14 21:06:27
以为是假新闻其实是真新闻,从袁立到王星,件件离谱又惊人

以为是假新闻其实是真新闻,从袁立到王星,件件离谱又惊人

上官晚安
2026-01-06 08:08:35
监管出手降杠杆!哪些板块最受冲击?

监管出手降杠杆!哪些板块最受冲击?

君临财富
2026-01-14 17:45:34
3+2!重击后脑勺!勇士主帅点评杨瀚森

3+2!重击后脑勺!勇士主帅点评杨瀚森

篮球实战宝典
2026-01-14 14:59:04
贺娇龙14号这天:早上9点半传死讯,官方辟谣,晚上11点确认走了

贺娇龙14号这天:早上9点半传死讯,官方辟谣,晚上11点确认走了

棱镜镜
2026-01-15 03:48:56
2026-01-15 08:56:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1708文章数 72关注度
往期回顾 全部

科技要闻

反垄断大棒,为何砸向了携程

头条要闻

特朗普:同委代总统通电话 美方同她"合作得非常好"

头条要闻

特朗普:同委代总统通电话 美方同她"合作得非常好"

体育要闻

你是个好球员,我们就拿你交易吧

娱乐要闻

网红彭十六偷税被封杀 曾成功转型明星

财经要闻

“疯狂的白银”,还能走多远?

汽车要闻

曝Model Y或降到20万以内!

态度原创

健康
教育
亲子
游戏
旅游

血常规3项异常,是身体警报!

教育要闻

孩子可以不成才,但不能不感恩

亲子要闻

我们不对你好,谁对你好~

《对魔忍派遣队》将于1月15日开启Android版测试

旅游要闻

西安这座古典园林,古树参天、闹中取静,冬天也美得惊心动魄

无障碍浏览 进入关怀版