Python基础之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基础之reduce函数 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python写一个自动发送直播弹幕的工具,非常好用!

    昨晚回家,表弟在看LOL直播,看得我气不打一处来,差点就想锤他。 身为程序员的表弟,看直播发弹幕居然还在手动发,当时我就用Python写了一个自动发送弹幕的脚本送给他用。 好了话不多说,我们直接开搞! 先看看效果 名字我就打码了,当然名字不是关键,我直接截图展示算了,GIF的话,太麻烦了。 接下来我们要准备好你想发送的弹幕内容 这个我都是随便打的,大家可以自…

    Python开发 2023年3月31日
    00
  • jupyter使用虚拟环境

    为了在jupyter中使用pyTorch的虚拟环境,来记录一下怎么操作一、conda命令的使用因为使用的是jupyter,所有就使用Anaconda Prompt来创建虚拟环境(也可使用virtualenv,不过没试过) conda create -n 环境名 # 创建的环境在默认路径下,C盘位置不够使用下面命令 # 指定创建路径 conda create …

    Python开发 2023年4月2日
    00
  • 用Python做一个抢票脚本,演唱会门票轻松到手!

    最近演唱会还挺多的,都是大家喜欢的那些知名歌手,所以特地出一手教程给大家助力(主要是 表弟想追女神,所以教他自己抢票) 知识点 selenium 淘宝滑块处理 抢购逻辑实现 必备环境 python 3.8 pycharm 专业版 谷歌浏览器+谷歌驱动+selenium3.141.0 stealth.min.js 代码展示 模块 import time fro…

    Python开发 2023年3月31日
    00
  • Python爬虫实战:批量爬取百度图片

    众所周知,某度本身就是最大的爬虫脚本,那么纯纯的去某个网站找壁纸,还不如去某度图片直接找,瞬间格局打开! 话不多说,直接用Python来开发一下此处资源! 开发环境 & 第三方模块 环境 解释器版本 >>> python 3.8代码编辑器 >>> pycharm 2021.2 模块 requests # 发送请求 …

    Python开发 2023年4月2日
    00
  • Python批量爬取大众点评数据

    众所周知,某点评是一直有JS加密的,所以关于它的外包一直都很贵,有些公司甚至用来面试,可见他的难度。 但是吧,最近他好像没有加密了,这~ 不值钱了啊! 那当时就忍不住了,就得用Python开始整活了!     话不多说,让我们上代码! 全部代码 今天就没那么多步骤了,直接上代码! import requests import parsel url = ‘ht…

    2023年4月2日
    00
  • python 装饰器

    一、我们在python语言中  常用@classmethod、@staticmethod这个装饰器,装饰器的作用简单来讲就是我们在很多地方可能都会用到一下相同的功能,这时我们会有两种想法。 1. 将这部分相同的功能封装成函数,然后在使用这个功能的时候程序中调用这个函数。 2. 将这部分相同的功能封装成装饰器,然后在使用这个功能的时候在需要处理的方法前加上对应…

    Python开发 2023年4月2日
    00
  • 重温Python基础——变量

    哈喽兄弟们,今天我们来复习下变量。 首先尝试在一个hello_world.py文件中使用变量,在文件开头添加一行代码,并对第二行代码进行修改,如下所示: message=”hello world” print(message) # Python源码/教程领取扣君羊:279199867 运行这个程序,会与 print(“hello world”) 相同。 我们…

    Python开发 2023年4月2日
    00
  • Python实现将文本数据批量导入Excel表格,并按格式保存

    本文实现用Python将文本文件自动保存到Excel表格里面去。 需求 将锦江区.txt 文件中的数据整理到 锦江区.xlsx 的 锦江区 sheet ; 将推荐菜字段丢弃(保留前面14个字段) ; 将人均消费中的 ¥ 符号去掉,如果价格为空整条数据都不要; 成果展示 txt文本部分数据 效果 稍微打了点码,尊重一下别人。 代码展示 import openp…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部