码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python 列表推导式:简洁、高效的数据操作艺术


    合集 - python全景系列(29)
    1.<Python全景系列-1> Hello World,1分钟配置好你的python环境05-142.< Python全景系列-2 > Python数据类型大盘点05-153.< Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!05-174.< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?05-185.< Python全景系列-5 > 解锁Python并发编程:多线程和多进程的神秘面纱揭晓05-216.< Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象05-247.< Python全景系列-7 > 提升Python编程效率:模块与包全面解读05-258.< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践05-299.< Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类05-3110.Python生成器深度解析:构建强大的数据处理管道06-0511.掌握Python文件操作:从基础到高阶的全方位探索06-1212.Python单元测试之道:从入门到精通的全面指南07-1813.深入探索 Django Rest Framework07-1314.跨越HTTP无状态边界:Cookie与Session在Django中的实战应用07-1115.Django ORM:最全面的数据库处理指南07-1016.详解Django请求与响应:深入理解Web Http交互的核心机制07-0917.Python Django 模版全解与实战07-0818.Django容易被遗忘却无比重要的框架默认文件介绍及使用方法07-0719.Python 爬虫实战:驾驭数据洪流,揭秘网页深处07-0620.Python史上最全种类数据库操作方法,你能想到的数据库类型都在里面!甚至还有云数据库!07-0521.Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!07-0422.Python Django Web开发实战06-3023.Python Flask - 快速构建Web应用详解06-2924.深入Python网络编程:从基础到实践06-2525.一文掌握Python多线程与多进程06-2026.Python正则表达式完全指南06-1327.Python的Lambda函数: 一把极简编程的瑞士军刀06-08
    28.Python 列表推导式:简洁、高效的数据操作艺术06-07
    29.Python日志模块:实战应用与最佳实践07-19
    收起

    Python 列表推导式:简洁、高效的数据操作艺术

    Python 的列表推导式,这个看似简单的语法糖,实则内含无限威力。在 Python 代码编写中,列表推导式的灵活性和简洁性让它成为了不可或缺的一部分。在这篇文章中,我们将更全面、更深入地探讨列表推导式,从基础的概念认识,到各类进阶的用法和操作,我们一一揭秘。最后,我们还将在 "One More Thing" 部分分享一个非常有趣且实用的列表推导式技巧,这会让你在编程道路上又多一份强大的工具。

    1. 列表推导式:语法糖的力量

    列表推导式,就是一种在 Python 中创建列表的方式,它的基础形式如下:

    [expression for item in iterable]
    

    它实质上是一个 for 循环的简化形式。例如,我们可以用它来创建一个包含 0 到 9 平方的列表:

    squares = [x**2 for x in range(10)]
    print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    这样,你不需要再使用传统的 for 循环来创建列表,代码更加简洁和清晰。

    2. 过滤元素:带条件的列表推导式

    列表推导式更强大的地方在于,我们可以在其中加入条件判断,以过滤出我们想要的元素:

    even_squares = [x**2 for x in range(10) if x % 2 == 0]
    print(even_squares) # Output: [0, 4, 16, 36, 64]
    

    在这个例子中,我们只生成了偶数的平方,只需加入一个简单的 if 条件,我们就可以灵活地过滤出我们需要的元素。

    3. 复杂的数据结构:嵌套的列表推导式

    更进一步,列表推导式还可以嵌套使用,处理更复杂的数据结构,比如我们要将一个嵌套列表展平:

    nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    flattened_list = [x for sublist in nested_list for x in sublist]
    print(flattened_list) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    这个例子中,我们将一个二维的嵌套列表展平成了一维列表,就像是将多层次的数据展开,方便我们进行后续处理。

    4. 数据变形:带表达式的列表推导式

    列表推导式中的表达式可以帮助我们对数据进行变形:

    strings = ['Hello', 'World', 'In', 'Python']
    lowercase_strings = [s.lower() for s in strings]
    print(lowercase_strings) # Output: ['hello', 'world', 'in', 'python']
    

    在这个例子中,我们将一个包含几个字符串的列表,通过 str.lower() 函数,将其转换成了全小写。通过改变表达式,我们可以在生成新列表的同时,对数据进行各种变形操作。

    5. 推广至其他数据结构:字典和集合的推导式

    推导式不仅仅可以应用于列表,还可以推广到字典和集合中:

    squared_dict = {x: x**2 for x in range(5)}
    print(squared_dict) # Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
    
    squared_set = {x**2 for x in range(5)}
    print(squared_set) # Output: {0, 1, 4, 16, 9}
    

    这两个例子分别演示了字典推导式和集合推导式的用法,这些结构的推导式可以更方便我们处理复杂的数据结构。

    6. 性能优化:列表推导式与 map/filter 的比较

    列表推导式不仅代码更加简洁,实际上在很多情况下,列表推导式的执行效率也优于传统的 map 或 filter 函数:

    import time
    
    # Using list comprehension
    start_time = time.time()
    squares = [x**2 for x in range(1000000)]
    end_time = time.time()
    print(f"List comprehension took {end_time - start_time} seconds")
    
    # Using map function
    start_time = time.time()
    squares = list(map(lambda x: x**2, range(1000000)))
    end_time = time.time()
    print(f"Map function took {end_time - start_time} seconds")
    

    在这个例子中,我们分别用列表推导式和 map 函数创建一个包含一百万个元素的列表,可以看到列表推导式的执行时间通常要少于 map 函数。

    One More Thing

    在我的 GitHub 学习过程以及在各种技术博客中阅读,我发现一个关于列表推导式的有趣且实用的技巧,那就是使用列表推导式实现全排列:

    perms = [(x, y, z) for x in range(3) for y in range(3) for z in range(3) if x != y and y != z and x != z]
    print(perms) # Output: [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
    

    这个例子通过列表推导式生成了 3 个元素的全排列,使用了嵌套循环和条件判断,非常简洁而高效。

    总的来说,Python 的列表推导式是一个非常强大而灵活的工具,能够帮助我们更好地处理数据和创建数据结构。希望这篇文章能帮助你更深入地理解和应用列表推导式,让你的 Python 代码更加简洁和高效。

    如有帮助,请多关注
    个人微信公众号:【Python全视角】
    TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。

  • 相关阅读:
    0基础编程教学,编程零基础该学什么,中文编程工具下载
    面试半个月后的一些想法
    如何从事自己热爱的事情并能赚到体面的薪资
    S32K324芯片学习笔记-实时控制系统-ADC
    px4+vio实现无人机室内定位
    STM32 + RT-Thread + LVGL
    ES6之Set集合(通俗易懂,含实践)
    QC1.0、QC2.0、QC3.0、QC4.0协议介绍
    python经典百题之统计字符数
    一种高精度低功耗NB-IoT温度传感器
  • 原文地址:https://www.cnblogs.com/xfuture/p/17463862.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号