欢迎关注 “小白玩转Python”,发现更多 “有趣”

引言

Python 是一种面向对象程序设计语言。但是,它提供了一些提供函数式编程风格的工具。其中一些工具包括 map()、 filter()和 reduce()函数。在文中,我们将探索reduce()函数并阐明其提供的多功能性和实用性。

使用for循环

介绍reduce()函数的最好的方式是从实际问题入手,并尝试用老式的方法解决它,即使用for循环。然后我们可以使用reduce函数尝试解决相同的问题。

假设我们有一个数字列表,我们希望将列表中的所有数字相乘,然后返回乘积。我们可以使用 for 循环来完成这个任务:

# list of numbers
num_list = [1,2,3,4,5]# set product equal to 1
product = 1# loop through num_list and multiply the numbers together
for num in num_list:product = product * numprint(product) # output is 120

我们有数字列表num_list。我们希望将该列表中的数字相乘并得到它们的乘积。我们创建变量product并将其设置为1。然后使用for循环遍历num_list,然后将每个数字乘以上一次迭代的结果。遍历num_list之后,product的值为120,这是列表中所有数字的乘积。

Reduce函数

事实上,我们可以使用reduce函数来完成上述任务。Reduce函数可以接受三个参数,其中两个是必需的。这两个必需的参数是: 一个函数(它本身包含两个参数)和一个迭代对象(例如一个列表)。第三个参数是初始化,是可选的,我们将在后面讨论它。

reduce(function, iterable[, initializer])

导入 reduce函数

reduce函数位于functools模块中,该模块包含高阶函数。高阶函数是作用于或返回其他函数的函数。因此,为了使用reduce函数,我们要么需要导入整个functools模块,要么只能从functools中导入reduce函数:

import functools
from functools import reduce

注意: 如果我们导入functools,我们需要像下面这样访问reduce函数: functools.reduce (参数)。如果只从functools模块中导入reduce函数,只需输入reduce (arguments)即可访问 reduce函数。

探索reduce函数

如上所述,reduce函数接受两个必需的参数: 一个函数和一个迭代对象。Reduce的第一个参数本身必须接受两个参数。Reduce将这个函数累积地应用于迭代(从左到右)的元素,并将其减少为单个值。

让我们来看一个例子:

假设我们使用的迭代对象是一个列表,比如开头例子中的 num_list:

num_list = [1,2,3,4,5]

我们用作reduce的第一个参数的函数本体如下:

def prod(x, y):return x * y

这个 prod 函数接受两个参数: x 和 y,然后返回他们的乘积。

让我们分别将prod函数和num_list作为函数和可迭代对象代入reduce中:

from functools import reduce
product = reduce(prod, num_list)

我们的迭代对象是 num_list,它是list: [1,2,3,4,5]。我们的函数prod接受两个参数x和y,首先接受 num_list 的前两个元素1和2,然后将它们作为x和y参数传递给prod函数。Prod 函数返回他们的乘积2。Reduce将使用这个累积值2作为新的x值,并使用 num_list中的下一个元素3作为新的y值。然后它将这两个值(2和3)作为x和y发送给prod函数,然后prod函数返回它们的乘积6。然后,这个6将用作新的x值,num_list中的下一个元素将用作新的y值,即4。然后它将6和4作为x和y值发送给prod函数,该函数返回24。因此,我们的新x值是24,新y值是 num_list的下一个元素。这两个值作为x和y值传递给prod函数,prod返回它们的乘积24 * 5=120。

第三个参数

还记得我们说过reduce可以接受可选的第三个参数,即初始化吗?其默认值为“None”。如果我们传入一个初始化,它将通过reduce用作第一个x值(而不是可迭代的第一个元素)。因此,如果我们在上面的示例中将数字2传递为初始化程序:

product = reduce(prod, num_list, 2)
print(product) #240

那么x和y的前两个值或参数分别是2和1。所有后续步骤都是相同的。

使用 Lambda 表达式

我们可以使用lambda表达式来简化代码:

product = reduce(lambda x,y: x*y, num_list)

使用Reduce函数的其他例子

还有很多其他的场景可以使用 reduce。

例如,我们可以在对列表中数字求和:

num_list = [1,2,3,4,5]
sum = reduce(lambda x,y: x + y, num_list)
print(sum) #15

或者我们可以找到列表中的最大值:

num_list = [1,2,3,4,5]
max_num = reduce(lambda x,y: x if x > y else y, num_list)
print(max_num) #5

或者列表中的最小数字:

num_list = [1,2,3,4,5]
min_num = reduce(lambda x,y: x if x < y else y, num_list)
print(min_num) #1

还有很多其他的应用!

注意: Python 确实有一些内置函数,比如 max ()、 min ()和 sum () ,这些函数对于这三个示例来说更容易使用。但是,我们的目标是展示如何使用 reduce ()来完成许多不同的任务。

总结

在本文中,我们学习了如何在python中导入和使用reduce函数。然后我们看到了如何将lambda表达式作为参数传入reduce。最后我们看到了一些如何使用reduce的例子。

·  END  ·

HAPPY LIFE

在Python中使用Reduce函数相关推荐

  1. python中的reduce() 函数

    在 Python3 中,reduce() 函数已经被从全局命名空间里移除了,它现在被放置在 functools 模块里,需要通过引入 functools 模块来调用 reduce() 函数: from ...

  2. python中filter(),reduce()函数

    filter()函数 是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 和一个list,这个函数的作用是对每个元素进行判断,返回 True或 False,filter() ...

  3. python中的reduce函数

    1.语法: 在python3中,内置函数中已经没有reduce了.要使用reduce,需要从functools模块里引入 2.作用 对序列中的元素进行累积 3.返回值 返回函数的计算结果 4.例子 f ...

  4. Python中的reduce()函数----可求积求和

    reduce()函数:是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...

  5. python中的reduce函数用法

    2020-09-15 导入相应的函数 from functools import reduce reduce() 函数会对参数序列中的元素进行相同的操作. 函数将一个数据集合(链表,元组等)中的所有数 ...

  6. python中的reduce、lambda函数

    Python中的reduce    python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须 ...

  7. Python中的map()函数和reduce()函数的用法

    Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下  

  8. Python中的reduce

    Python中的reduce    python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须 ...

  9. Python中的匿名函数和函数式编程

    Python中的匿名函数和函数式编程 文章目录 Python中的匿名函数和函数式编程 一.匿名函数 匿名函数的格式: 二.函数式编程 map() filter() reduce() 区别 三.'三目运 ...

最新文章

  1. Ext Js MVC系列二 利用Application和Viewport进行应用程序初始化和页面布局
  2. flink 自定义 窗口_【Flink 精选】阐述 Watermark 机制,剖析 Watermark 的产生和传递流程...
  3. RHCE课程-初级部分6、编辑工具VIM,网络配置,进程优先,日志文件简介。
  4. oracle中scott/tiger、sys、SYSDBA、system都是什么用
  5. 源表字段修改以后引发GoldenGate同步失败
  6. springboot整合redis,推荐整合和使用案例(2021版)
  7. Java字符串拼接“+”需要注意的问题
  8. input失去焦点和获得焦点jquery焦点事件
  9. Emacs之hs-minor-mode折叠代码
  10. Python urllib爬取百度首页
  11. Kubernetes (federation)联邦机制介绍
  12. python GUI打开文本文件代码
  13. C语言oj统计衣服尺寸,如何测量衣服尺寸?
  14. linux系统查看内核版本是多少,在linux下查看内核版本、gcc版本、操作系统多少位等参数...
  15. VC++2010解决上位机dll报错(load library error)
  16. 微信小程序之简易音乐播放器的实现
  17. 自动驾驶 Apollo 源码分析系列,感知篇(三):红绿灯检测和识别
  18. 矩阵快速幂(矩阵加速)
  19. 基于无电离层组合/非差非组合混合观测模型的精密单点定位-阅读笔记
  20. 篮球数据API接口 - 【篮球文字直播】API调用示例代码

热门文章

  1. excel列宽、行高换算
  2. Guava-EventBus使用详解
  3. EventBus使用介绍
  4. Carsim中search help 功能异常
  5. matlab骑士的金币问题,Matlab阶跃信号函数
  6. iOS:你会如何设计一个框架,给别人使用!
  7. 外企英语面试问题集锦
  8. 【HTML5作业】模仿12306网站--前端
  9. Drosophila Activity Monitoring System(DAMS)果蝇行为监测系统数据分析
  10. Python 爬虫之Google翻译实现