码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Code Anatomy - 编写高性能 Python 代码


    编写简短高效的 Python 代码并不总是那么容易或直接。然而,我们经常看到一段代码,却没有意识到其编写方式背后的思考过程。我们将看一下片段,它返回两个迭代之间的差异,以了解其结构。

    根据片段功能的描述,我们可以天真地写成这样:

    1. def difference(a, b):
    2. return [item for item in a if item not in b]

    此实现可能运行良好,但不考虑b. 如果第二个列表中有许多重复项,这会使代码花费更多的时间。为了解决这个问题,我们可以使用set()只保留列表中唯一值的方法:

    1. def difference(a, b):
    2. return [item for item in a if item not in set(b)]

    这个版本虽然看起来像是一个改进,但实际上可能比以前的版本慢。如果你仔细观察,你会发现set()每次都会调用 everyitem导致a结果set(b)被评估。这是一个示例,我们set()用另一种方法包装以更好地展示问题:

    1. def difference(a, b):
    2. return [item for item in a if item not in make_set(b)]
    3. def make_set(itr):
    4. print('Making set...')
    5. return set(itr)
    6. print(difference([1, 2, 3], [1, 2, 4]))
    7. # Making set...
    8. # Making set...
    9. # Making set...
    10. # [3]

    此问题的解决方案是set()在列表推导之前调用一次并存储结果以加快处理速度:

    1. def difference(a, b):
    2. _b = set(b)
    3. return [item for item in a if item not in _b]

    在性能方面值得一提的另一个选项是使用列表推导与filter()and list()。使用后一个选项实现相同的代码将导致如下所示:

    1. def difference(a, b):
    2. _b = set(b)
    3. return list(filter(lambda item: item not in _b, a))

    使用timeit分析最后两个代码示例的性能,很明显使用列表推导可以比替代方法快十倍。这是因为它是一种本地语言功能,其工作方式与简单循环非常相似,for没有额外函数调用的开销。这解释了为什么我们更喜欢它,除了可读性。

  • 相关阅读:
    程序猿生成二维码的三种方法(在线接口+在线网站+本地程序)
    C语言实现计算数的整数次幂
    世界杯,越位,点球,角球等足球相关英语怎么说
    Oracle/PLSQL: Rank Function
    做短视频内容需要注意的五大要素,你做的内容都有吗
    Kotlin(七) 接口
    使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理
    家庭宽带相关知识及工具
    GIS开发入坑(二)--ArcGIS影像切片并使用GeoServer发布
    Git实操图文详解系列教程(2)——GitHub核心操作
  • 原文地址:https://blog.csdn.net/liuhao9999/article/details/125505664
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号