Python中reduce()函数的用法详细解读

 更新时间:2023年08月21日 09:50:52   作者:IT之一小佬  
这篇文章主要介绍了Python中reduce()函数的用法详细解读,reduce函数是通过函数对迭代器对象中的元素进行遍历操作,但需要注意的是 reduce 函数返回的是计算的结果,而 map/filter 返回的是作用后的迭代器对象,需要的朋友可以参考下

Python中的reduce()函数

reduce()源码:

def reduce(function, sequence, initial=None): # real signature unknown; restored from __doc__
    """
    reduce(function, sequence[, initial]) -> value
    Apply a function of two arguments cumulatively to the items of a sequence,
    from left to right, so as to reduce the sequence to a single value.
    For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).  If initial is present, it is placed before the items
    of the sequence in the calculation, and serves as a default when the
    sequence is empty.
    """
    pass

从上述可以看到,reduce()有三个参数,第一个是函数function,第二个是序列sequence,第三个是initial,为初始值,默认为None

reduce(func,lst),其中func必须至少有两个参数。每次func计算的结果继续和序列的下⼀个元素做累积计算。

注意:reduce()传⼊的参数func必须至少接收2个参数。

需求:计算 list1 序列中各个数字的累加和。

示例代码1:

import functools
list1 = [1, 2, 3, 4, 5]
#  方法一
def func(a, b):
    return a + b
result = functools.reduce(func, list1)
print(result)  # 15
# 方法二
result2 = functools.reduce(lambda x, y: x + y, list1)
print(result2)

运行结果:

示例代码2:

import functools
list1 = [1, 2, 3, 4, 5]
#  方法一
def func(a, b):
    return a * b
result = functools.reduce(func, list1)
print(result)  # 15
# 方法二
result2 = functools.reduce(lambda x, y: x * y, list1)
print(result2)

运行结果:

示例代码3:

import functools
list1 = [1, 2, 3, 4, 5]
list2 = [1, 1, 1, 1, 1]
list3 = [0, 0, 0, 0, 0]
list4 = [0, 0, 0, 0, 1]
result1 = functools.reduce(lambda x, y: x & y, list1)
result2 = functools.reduce(lambda x, y: x & y, list2)
result3 = functools.reduce(lambda x, y: x | y, list3)
result4 = functools.reduce(lambda x, y: x | y, list4)
print(result1)
print(result2)
print(result3)
print(result4)

运行结果:

示例代码4:

from functools import reduce
def add(x, y):
    return x + y
a = [1, 2, 3, 4, 5]
#  reduce()两个参数
ret1 = reduce(add, a)
print(ret1)
#  reduce()三个参数
ret2 = reduce(add, a, 6)
print(ret2)

运行结果:

示例代码5: 【mongo和es语句中使用reduce】

from functools import reduce
from mongoengine import Q
from mongoengine.queryset.visitor import Q
from elasticsearch_dsl import Q as EQ
# query_list = ['x', 'y', 'z']  # 字符串报错:TypeError: unsupported operand type(s) for &: 'str' and 'str'
# query_list = [2, 3]  # 2
# query_list = [2, 3, 4]  # 0
# mongo中使用
query_list = [Q(aa="aa"), Q(bb='bb'), Q(cc='cc'), Q(dd='dd')]  # (Q(**{'aa': 'aa'}) & Q(**{'bb': 'bb'}) & Q(**{'cc': 'cc'}) & Q(**{'dd': 'dd'}))
res = reduce(lambda x, y: x & y, query_list)
print(res)
# es中使用
query_list = [EQ(aa="aa"), EQ(bb='bb'), EQ(cc='cc'), EQ(dd='dd')]  # MatchAll(dd='dd')
res = reduce(lambda x, y: x & y, query_list)
print(res)

运行结果:

到此这篇关于Python中reduce()函数的用法详细解读的文章就介绍到这了,更多相关Python中reduce()函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入了解python列表(LIST)

    深入了解python列表(LIST)

    这篇文章主要介绍了python列表(LIST)的相关知识,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • python 矩阵增加一行或一列的实例

    python 矩阵增加一行或一列的实例

    下面小编就为大家分享一篇python 矩阵增加一行或一列的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 虚拟机下载python是否需要联网

    虚拟机下载python是否需要联网

    在本篇文章里小编给大家分享的是一篇关于虚拟机下载python是否需要联网的相关文章,有需要的朋友们可以参考下。
    2020-07-07
  • Python全字段断言之DeepDiff模块详解

    Python全字段断言之DeepDiff模块详解

    这篇文章主要介绍了Python全字段断言之DeepDiff模块详解,Python中也提供了deepdiff库,常用来校验两个对象是否一致,包含3个常用类,DeepDiff,DeepSearch和DeepHash,,需要的朋友可以参考下
    2023-08-08
  • tensorflow2.0的函数签名与图结构(推荐)

    tensorflow2.0的函数签名与图结构(推荐)

    这篇文章主要介绍了tensorflow2.0的函数签名与图结构,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 对Pytorch神经网络初始化kaiming分布详解

    对Pytorch神经网络初始化kaiming分布详解

    今天小编就为大家分享一篇对Pytorch神经网络初始化kaiming分布详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 树莓派+摄像头实现对移动物体的检测

    树莓派+摄像头实现对移动物体的检测

    这篇文章主要为大家详细介绍了树莓派+摄像头实现对移动物体的检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例

    PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例

    今天小编就为大家分享一篇关于PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 解决Python3 struct报错argument for 's' must be a bytes object

    解决Python3 struct报错argument for 's'&

    这篇文章主要为大家介绍了解决Python3 struct报错argument for 's' must be a bytes object方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • wxPython中listbox用法实例详解

    wxPython中listbox用法实例详解

    这篇文章主要介绍了wxPython中listbox用法,以实例形式较为详细的分析了Python使用wxPython中listbox的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论