在Python中使用Reduce函数

欢迎关注 “小白玩转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 * num
 
print(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,编程语言,lambda,stream)