python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python中reduce()函数

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

作者: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()函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文