当前位置: 首页 > news >正文

python中的reduce函数

目录

初识reduce函数

什么是reduce函数

reduce函数的定义

使用场景

工作原理

reduce函数的运用

常见试题类型

累加

累乘

最大值

字符串拼接

注意事项


 

初识reduce函数

什么是reduce函数

reduce() 是Python functools模块中的一个高阶函数,用于将一个可迭代对象(如列表、元组等)中的元素,按照指定的函数依次累计地进行计算,从序列的第一个元素开始,将前一次计算的结果与下一个元素传入函数进行计算,直到处理完所有元素,最终将整个可迭代对象归约为一个单一的结果。

reduce函数的定义

语法结构:

from functools import reduce

reduce(function, iterable, initializer=None)

function:一个接收两个参数的函数,用于定义“如何将两个值合并”的逻辑。每次调用时,第一个参数是累计结果,第二个参数是可迭代对象中的下一个元素。

iterable:要进行归约的可迭代对象(如 list、tuple、set 等)。

initializer(可选):初始值。如果提供,则作为第一次调用 function 时的第一个参数,且 iterable 中的第一个元素将作为第二个参数参与计算。如果不提供,则 iterable 的第一个元素作为初始值。

使用场景

  • 累加、累乘
  • 求最大值/最小值
  • 字符串拼接
  • 将多个值合并为一个值

工作原理

无initializer:

reduce(f, [x1, x2, x3, x4])
  1. 取x1与x2传入f,得到result1
  2. 取result1与x3传入f,得到result2
  3. 取result2与x4传入f,得到result3
  4. 返回result

    有initializer:

    reduce(f, [x1, x2, x3], initializer=v0)
    1. 如果取v0与x1传入f,得到result1
    2. 取result1与x2传入f,得到result2
    3. 取result2与x3传入f,得到result3
    4. 返回result3

    reduce函数的运用

    常见试题类型

    累加

    例如,在古老的山谷里,小小勇者一路打开五个沉睡多年的宝箱:
    第一个宝箱只有 5 枚金币,但他依旧微笑收下;
    第二个宝箱闪出 10 枚金币,瞬间让他的口袋更鼓;
    接着是 20 枚、15 枚……直到最后一个沉甸甸的宝箱,里面整整 50 枚金币!
    他把所有金币加起来,总共收获了 100 枚金币,足够在王都买下一把新的长剑。

    from functools import reduce
    gold_coins = [5, 10, 20, 15, 50]  # 每个宝箱的金币数
    total_gold = reduce(lambda a, b: a + b, gold_coins)
    print(total_gold)

    对代码进行运行测试:

    累乘

    例如,决战前夕,小小勇者为自己做足了准备:
    先换上一把锋利度提升 20% 的新剑;
    再喝下一瓶能让力量提升 50% 的药水;
    最后在战场上发出战吼,额外提升 10% 的战力。
    三重加成叠加后,他的攻击力几乎翻倍,从 100 提升到 198,足以迎战巨龙。

    from functools import reduce
    multipliers = [1.2, 1.5, 1.1]  # 武器加成、药水加成、战吼加成
    total_multiplier = reduce(lambda a, b: a * b, multipliers)
    print(total_multiplier)

    对代码进行运行测试:

    最大值

    例如,冒险公会举办了年度挑战赛,小小勇者连续参加了五场比拼:
    第一场稳扎稳打,拿下 350 分;
    第二场突破自我,提升到 480 分;
    第三场状态神勇,一举冲到 720 分;
    后两场虽然保持高分,但仍没能超过那次的巅峰发挥。
    最终,他以 720 分 的最佳成绩站上了金色领奖台。

    from functools import reduce
    battle_scores = [350, 480, 720, 610, 500]
    best_score = reduce(lambda a, b: a if a > b else b, battle_scores)
    print(best_score)

    对代码进行运行测试:

    字符串拼接

    例如,那一年,勇者背上行囊,从宁静的村庄出发:
    他先踏过一片笼罩在迷雾中的黑森林,
    途中遇到一伙山贼,凭借机智与剑法将其击退;
    最终,他看见了王都城墙上飘扬的旗帜——冒险的终点与新篇章的起点。
    他的旅途被记录成:“踏出村庄 → 穿过黑森林 → 击败山贼 → 到达王都”。

    from functools import reduce
    events = ["踏出村庄", "穿过黑森林", "击败山贼", "到达王都"]
    journey = reduce(lambda a, b: a + " → " + b, events)
    print(journey)

    对代码进行运行测试:

    注意事项

    • 需导入:from functools import reduce
    • function 必须接收两个参数
    • 空可迭代且无初始值会报错
    • 简单加法、最大值等优先用内置函数
    • 函数逻辑应无副作用
    http://www.lryc.cn/news/622501.html

    相关文章:

  1. MSYS2+CMake配置C/C++开发环境
  2. OpenSCA开源社区每日安全漏洞及投毒情报资讯|14th Aug. , 2025
  3. plantsimulation中存储(store)、缓冲区(buffer)、放置缓冲区(PlaceBuffer)的区别,分别应用于那种情况
  4. OpenCompass傻瓜式入门教程
  5. linux-数据链路层
  6. 博弈论06——PPAD复杂度问题
  7. JAVA-DAY7-面向对象进阶
  8. 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.15
  9. Java研学-SpringCloud(三)
  10. Erlang notes[2]
  11. Shortest Routes II(Floyd最短路)
  12. 数据结构:二叉树的表示方式(Representation of Binary Trees)
  13. 【100页PPT】数字化转型集团信息化总体解决方案(附下载方式)
  14. UI-TARS-Desktop 产品发展史:从实验室原型到企业级解决方案
  15. gulimall项目笔记:P54三级分类拖拽功能实现
  16. 深入理解C++正则表达式:从基础到实践
  17. ramdisk内存虚拟盘(一)——前世今生
  18. Python爬取推特(X)的各种数据
  19. 功能组和功能组状态的概念关系和区别
  20. 【揭秘红黑树:高效数据结构解析】
  21. 谈谈《More Effective C++》的条款30:代理类
  22. JavaScript 防抖(Debounce)与节流(Throttle)
  23. Python入门第2课:变量、数据类型与输入输出
  24. MySQL(多表查询练习)
  25. C#控制台输入(Read()、ReadKey()和ReadLine())
  26. 【大模型微调系列-01】 入门与环境准备
  27. Linux信号保存
  28. PowerShell 格式化系统完全掌握(上):工作原理、默认规则与三大格式化命令
  29. 【数据分享】上市公司创新韧性数据(2007-2023)
  30. 数据处理分析环境搭建+Numpy使用教程