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

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.

相关推荐
热点推荐
广东汕头一女子高空抛撒大量港币,当地回应:能捡到的钱款已被统一收还给业主,警方已介入

广东汕头一女子高空抛撒大量港币,当地回应:能捡到的钱款已被统一收还给业主,警方已介入

极目新闻
2026-04-14 18:04:40
同房前吃它就能又硬又久?关于国产助勃药司美那非的正确打开方式

同房前吃它就能又硬又久?关于国产助勃药司美那非的正确打开方式

百济健康
2026-04-14 13:36:48
越南高铁终于开工,中的方案被放弃,河内留心眼:不接入中方铁路

越南高铁终于开工,中的方案被放弃,河内留心眼:不接入中方铁路

科学发掘
2026-04-14 13:07:18
大批“五一”航班突然取消

大批“五一”航班突然取消

第一财经资讯
2026-04-14 13:12:49
男子花20万在小姐身上,听到小姐和别人缠绵后,2011年将小姐杀死

男子花20万在小姐身上,听到小姐和别人缠绵后,2011年将小姐杀死

汉史趣闻
2026-04-13 14:28:43
夫妻AA制29年,丈夫退休后把存款留给初恋,妻子住院缴费时傻了眼

夫妻AA制29年,丈夫退休后把存款留给初恋,妻子住院缴费时傻了眼

程哥讲堂
2025-06-02 18:11:14
怪不得联盟坐不住了!美媒透露:本赛季有八支至少输掉55场比赛!

怪不得联盟坐不住了!美媒透露:本赛季有八支至少输掉55场比赛!

爱体育
2026-04-14 16:50:19
中国肺癌发病率世界第一!提醒:罪魁祸首已揪出,7种食物要少吃

中国肺癌发病率世界第一!提醒:罪魁祸首已揪出,7种食物要少吃

健康之光
2026-03-23 20:10:05
闪电战!300857,3分钟涨停封单26亿,一季度净利暴增4倍

闪电战!300857,3分钟涨停封单26亿,一季度净利暴增4倍

大众证券报
2026-04-14 10:36:13
婚变传闻真相大白4个月,章泽天近况曝光,估计和你想的不一样

婚变传闻真相大白4个月,章泽天近况曝光,估计和你想的不一样

阿绐聊社会
2026-04-13 18:03:32
布雷切尔赛后一番感慨 道出他为何是四大莽夫 常冰玉能接替赵心童

布雷切尔赛后一番感慨 道出他为何是四大莽夫 常冰玉能接替赵心童

郝小小看体育
2026-04-14 09:16:17
乌军对克里米亚发动大规模袭击

乌军对克里米亚发动大规模袭击

界面新闻
2026-04-14 18:34:58
407米!深圳第三高楼要来了,现场直击,太震撼了!

407米!深圳第三高楼要来了,现场直击,太震撼了!

GA环球建筑
2026-04-14 20:33:29
交警提醒:路口新标线已启用,违规直接扣6分罚200,开车务必留意

交警提醒:路口新标线已启用,违规直接扣6分罚200,开车务必留意

复转这些年
2026-04-14 12:08:14
五十七岁,亦是风华 | 萧蔷的冻龄哲学

五十七岁,亦是风华 | 萧蔷的冻龄哲学

述家娱记
2026-04-13 11:36:17
中东五国天塌了,美国的敲诈还悬在头顶,伊朗又开出巨额账单

中东五国天塌了,美国的敲诈还悬在头顶,伊朗又开出巨额账单

壹只灰鸽子
2026-04-14 18:27:42
儿子拒绝送饭后续:母亲饿到崩溃,孩子撒谎享乐,反被说小题大做

儿子拒绝送饭后续:母亲饿到崩溃,孩子撒谎享乐,反被说小题大做

离离言几许
2026-03-17 17:31:31
最新民调:过半台湾民众认同必须主动面对两岸统一问题

最新民调:过半台湾民众认同必须主动面对两岸统一问题

海峡导报社
2026-04-14 15:12:17
协议即将达成,28国联手对付中国,名单公开,没一个善茬

协议即将达成,28国联手对付中国,名单公开,没一个善茬

白色得季节
2026-04-14 12:54:50
后续!孕妇花198买水果被骂:已终止妊娠并准备离婚,老公崩溃了

后续!孕妇花198买水果被骂:已终止妊娠并准备离婚,老公崩溃了

米果说识
2026-04-14 19:52:28
2026-04-14 21:03:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1826文章数 80关注度
往期回顾 全部

科技要闻

离职同事"炼化"成AI?这届公司不需要活人了

头条要闻

女子丧偶后和上海婆婆反目 婆婆出钱买的房打官司输了

头条要闻

女子丧偶后和上海婆婆反目 婆婆出钱买的房打官司输了

体育要闻

带出中超最大黑马!他让球迷们“排队道歉”

娱乐要闻

宋祖儿刘宇宁恋情大反转 正主火速辟谣

财经要闻

许家印认罪,他和恒大还有多少欠债?

汽车要闻

售12.99万起/续航2000km 风云T9L上市

态度原创

手机
旅游
教育
家居
本地

手机要闻

苹果iOS 26.4现Bug:捷克语键盘缺失字符致用户无法解锁手机

旅游要闻

什川古梨园绽放“花”样经济

教育要闻

AI漫剧还能不能做?

家居要闻

现代融合 自然灵动

本地新闻

12吨巧克力有难,全网化身超级侦探添乱

无障碍浏览 进入关怀版