首页 > 编程语言 >Python基础之reduce函数

Python基础之reduce函数

时间:2022-08-19 16:12:48浏览次数:77  
标签:arr 函数 Python functools reduce 循环

哈喽大家好,今天说一下reduce函数的使用方法,以及与for循环的对比。

reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。

reduce函数先从列表(或序列)中取出2个元素执行指定函数,并将输出结果与第3个元素传入函数,输出结果再与第4个元素传入函数,…,以此类推,直到列表每个元素都取完。

# 很多小伙伴在学习的过程中,因为没有好的资料和教程,也不清楚学习方向,以及遇到问题得不到及时的解决,导致自己丧失了学习兴趣与动力,不仅白白浪费时间精力,而且下次在想学东西,也没有兴趣了。

# 所以小编创了一个学习交流q君羊 279199867,准备了海量的学习资料,直接找管理领取就可以了,同数千志同道合的人一同学习交流,

 

reduce用法

对列表元素求和,如果不用reduce,我们一般常用的方法是for循环:

def sum_func(arr):
    if len(arr) <= 0:
        return 0
    else:
        out = arr[0]
        for v in arr[1:]:
            out += v
        return out

a = [1, 2, 3, 4, 5]
print(sum_func(a))

 

可以看到,代码量比较多,不够优雅。如果使用reduce,那么代码将非常简洁:

from functools import reduce

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

def add(x, y): return x + y

print(reduce(add, a))

 

输出结果为:

15

 

reduce与for循环性能对比

与内置函数map和filter不一样的是,在性能方面,reduce相比较for循环来说没有优势,甚至在实际测试中

reduce比for循环更慢。
from functools import reduce
import time

def test_for(arr):
    if len(arr) <= 0:
        return 0
    out = arr[0]
    for i in arr[1:]:
        out += i
    return out


def test_reduce(arr):
    out = reduce(lambda x, y: x + y, arr)
    return out

a = [i for i in range(100000)]
t1 = time.perf_counter()
test_for(a)
t2 = time.perf_counter()
test_reduce(a)
t3 = time.perf_counter()
print('for循环耗时:', (t2 - t1))
print('reduce耗时:', (t3 - t2))

 

输出结果如下:

for循环耗时: 0.009323899999999996
reduce耗时: 0.018477400000000005

 

因此,如果对性能要求苛刻,建议不用reduce, 如果希望代码更优雅而不在意耗时,可以用reduce。

好啦,今天的分享就到这,如果对你有帮助的话可以收藏起来哟!

给大家推荐一套Python爬虫教程,涵盖了大部分的常见案例,非常好用!

Python 爬虫实战一百例

标签:arr,函数,Python,functools,reduce,循环
From: https://www.cnblogs.com/hahaa/p/16602338.html

相关文章

  • python JSON.parse
    一、JSON的解析方法有两种:eval()和JSON.parse()varjsonstr='{"str1":"Hello,","str2":"world!"}';varevalJson=eval('('+jsonstr+')');varjsonParseJson=JSON.parse......
  • python基础-函数式编程
    概念:电脑运算视作数学上的函数计算高阶函数:map,reduce,filter无副作用,相同的参数调用时钟产生同样的结果闭包Closure例子:defcache(func):store={}#外部自由......
  • 练习7:函数记忆相关
    何为函数记忆函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据。常用于,复杂且有重复的计算。例如:斐波那契数列的计算under......
  • @FunctionalInterface 函数式接口
    作用:在编译过程中,校验该接口只有一个抽象方法;解释:除了唯一的抽象方法外,可以包含已经有实现的方法(包括静态方法);使用:可以使用Lambda表达式来表示该接口的一个实现:@Functi......
  • python将代码打包成whl或者压缩文件使用pip安装
    需要条件:安装setuptools,wheel创建目录helloworld—init.py—代码1.py—代码2.pysetup.py编辑__init__.pyfromhelloworldimport代码1,代码2在helloworld同级下......
  • python生成随机码-转至武沛齐老师
      Python生成随机验证码,需要使用PIL模块.安装:1pip3installpillow基本使用1.创建图片123456789from PIL import I......
  • Python中,函数的返回值
    deffun(num):odd=[]#存奇数even=[]#存偶数foriinnum:ifi%2:odd.append(i)else:even.append(i)re......
  • python激活
    Pycharm又过期了怎么办? 方法一:(亲测可用)1、打开网址: lookdiv.com 2、在输入框输入钥匙:lookdiv.com3、点击“获取激活码”按钮,获取激活码 4.激活后可以使用几......
  • python-zip()函数-zip*函数-压缩-解压缩
    python-zip()函数-压缩-解压缩zip()函数:将多个序列(列表、元组、字典、集合、字符串以及range()构成的列表)按一定规则重新组成一组元组。常与list()函数搭配使用,list......
  • python中的@的使用
    在python中,@是一个装饰器,针对某个函数,起调用传参的作用。具体怎么用的可以参考如下代码:defA(fn):print("a")fn()defB():print("b")@AdefC():......