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

文章目录

  • Python 列表推导式:简洁、高效的数据操作艺术
  • 1. 列表推导式:语法糖的力量
  • 2. 过滤元素:带条件的列表推导式
  • 3. 复杂的数据结构:嵌套的列表推导式
  • 4. 数据变形:带表达式的列表推导式
  • 5. 推广至其他数据结构:字典和集合的推导式
  • 6. 性能优化:列表推导式与 map/filter 的比较
  • One More Thing
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


在这里插入图片描述

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 的比较


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

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技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,希望提供给想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/254300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LearnDash LMS ProPanel在线学习系统课程创作者的分析工具

点击阅读LearnDash LMS ProPanel在线学习系统课程创作者的分析工具原文 LearnDash LMS ProPanel在线学习系统课程创作者的分析工具通过整合报告和作业管理来增强您的 LearnDash 管理体验,使您能够发送特定于课程的通信,并显示课程的实时活动&#xff01…

堆与二叉树(上)

本篇主要讲的是一些概念,推论和堆的实现(核心在堆的实现这一块) 涉及到的一些结论,证明放到最后,可以选择跳过,知识点过多,当复习一用差不多,如果是刚学这一块的,建议打…

shell实现折线图

生成 100 行数据到文件 file.txt for ((i1; i<100; i));doif [ ${i} -lt 10 ];thennum$(( (RANDOM % 5) 10 i ))elsenum$(( (RANDOM % 5) 10 15 ))fiecho ${num} done 通过文件 file.txt 生成折线图 #!/bin/bash# 指定文件名&#xff0c;该文件必须为数字 file./file.…

Redis最实用的基础入门数据结构和常用指令使用教程

1.单线程redis操作为什么那么快&#xff1f; 一方面&#xff0c;Redis 的大部分操作在内存上完成&#xff0c;再加上它采用了高效的数据结构&#xff0c;例如哈希表和跳表&#xff0c;这是它实现高性能的一个重要原因。另一方面&#xff0c;就是 Redis 采用了多路复用机制&…

patchless amsi学习(中)

DR7 DR7被称为“调试控制寄存器”&#xff0c;允许对每个硬件断点进行精细控制。其中&#xff0c;前8位控制是否启用了特定的硬件断点。偶数位&#xff08;0、2、4、6&#xff09;称为L0-L3&#xff0c;在本地启用了断点&#xff0c;这意味着仅在当前任务中检测到断点异常时才…

配置Nginx解决跨域问题

Nginx 中将前端请求中的所有以 “/apiUrl” 开头的路径代理到 http://192.12.200.101:9813 例如&#xff1a; /apiUrl/login > http://192.12.200.101:9813/login 配置nginx环境 进入Nginx 的配置文件编辑界面: sudo nano /etc/nginx/conf.d/default.conf开始编辑 defaul…

7.实现任务的rebalance

1.设计 1.1 背景 系统启动后&#xff0c;所有任务都在被执行&#xff0c;如果这时某个节点宕机&#xff0c;那它负责的任务就不能执行了&#xff0c;这对有稳定性要求的任务是不能接受的&#xff0c;所以系统要实现rebalance的功能。 1.2 设计 下面是Job分配与执行的业务点…

使用案例总结Vlookup函数的30种用法

1 基础用法 =VLOOKUP(A12,B$1:D$8,3,0) 2 批量查找 =VLOOKUP(A11:A13,A2:C8,3,0) 3 模糊查找 =VLOOKUP("*"&D2&"*",A:B,2,0) 4 模糊查找2 =VLOOKUP(D10&"??",A:B,2,0) 5 模糊查找3 =

HBuilder X将Vue打包APP返回上一页退出问题、清除缓存页面历史防止返回登录页(上一页)、以及状态栏颜色切换

目录 一、返回上一页退出问题 二、清除缓存页面历史防止返回上一页 三、状态栏颜色切换 一、返回上一页退出问题 1.首先重新认识一下vue的页面跳转&#xff0c;这里我只说常用到的两个 goSkip(){//直接跳转this.$router.push(/test);this.$router.replace(/test);//带参数跳…

计算机图形学头歌合集(题集附解)

目录 CG1-v1.0-点和直线的绘制 第1关&#xff1a;OpenGL点的绘制 第2关&#xff1a;OpenGL简单图形绘制 第3关&#xff1a;OpenGL直线绘制 第4关&#xff1a;0<1直线绘制-dda算法<> 第5关&#xff1a;0<1直线绘制-中点算法<> 第6关&#xff1a;一般直线绘…

Flink系列之:大状态与 Checkpoint 调优

Flink系列之&#xff1a;大状态与 Checkpoint 调优 一、概述二、监控状态和 Checkpoints三、Checkpoint 调优四、RocksDB 调优五、增量 Checkpoint六、RocksDB 或 JVM 堆中的计时器七、RocksDB 内存调优八、容量规划九、压缩十、Task 本地恢复十一、主要&#xff08;分布式存储…

云仓酒庄的品牌雷盛红酒LEESON分享香槟为什么是“酸”的?

云仓酒庄致力成为红酒爱好者的首选供应商。云仓酒庄品牌雷盛红酒多系列、多国家、多价位区间的多品种供货&#xff0c;使得酒品丰富而多样&#xff0c;既可以整箱方式销售&#xff0c;也可以单瓶模式购买&#xff0c;全管道使成本更低&#xff0c;降低中间仓储环节、支线物流仓…

codeforces A. Constructive Problems

分析 由图可得&#xff1a;一开始放一个&#xff0c;由于边上的无需依靠对角线 r e b u i l d rebuild rebuild &#xff0c;所以可以直接 r e b u i l d rebuild rebuild &#xff0c;这样一列就好了。然后第二列随便放一个位置&#xff0c;其他所有都可以靠对角线 r e b u…

12.18拓扑排序,DAG,模板,课程安排

拓扑排序 有向无环图一定是拓扑序列,有向有环图一定不是拓扑序列。 无向图没有拓扑序列。 首先我们先来解释一下什么是有向无环图&#xff1a; 有向就是我们两个结点之间的边是有方向的&#xff0c;无环的意思就是整个序列中没有几个结点通过边形成一个圆环。 下图就是一个…

实战Src对ruoyi框架管理系统漏洞的复现

前言&#xff1a; 在挖src的时候&#xff0c;搜搜有没有后台弱口令能进去的&#xff1a; 发现一个弱口令进去后&#xff1a; 【这个蓝色的草丛居然堪比算是ruoyi的指纹】 看这界面&#xff0c;是不是很像ruoyi 插件一看&#xff1a; 前端vue.js 加上登录的cookie rememberM…

Python-flask 入门代码

python与pycharm安装 过程略&#xff0c;网上很多&#xff0c;记得为pycharm配置默认解释器 虚拟环境 pipenv # 全局安装虚拟环境 # 可加-U参数&#xff0c;明确全局安装&#xff0c;不加好像也可以? pip3 install pipenv #检查安装情况 pipenv --version # ---控制台输出…

Spring Boot 3 + Vue 3 整合 WebSocket (STOMP协议) 实现广播和点对点实时消息

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

鸿蒙Js实战,计算器功能开发

场景&#xff1a; 通过动态设置按钮组件button实现计算器的键盘&#xff0c;通过文本text显示计算的表达书&#xff0c;可以计算&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;可以一个一个移除&#xff0c;可以重置 等。 下面我们开始今天的文章&#xff0c;还是老规…

AIGC(生成式AI)试用 15 -- 小结

断断续续的尝试在实际的工作使用中理解和测试AIGC&#xff0c;运用会越来越多、越来越广范&#xff0c;但也是时候做个小结了。 没有太用热火的ChatGPT&#xff0c;只是拿了日常最容易用到的CSDN创作助手&#xff08;每周写文章总是看到&#xff09;和文心一言&#xff08;…

【复杂网络分析与可视化】——通过CSV文件导入Gephi进行社交网络可视化

目录 一、Gephi介绍 二、导入CSV文件构建网络 三、图片输出 一、Gephi介绍 Gephi具有强大的网络分析功能&#xff0c;可以进行各种网络度量&#xff0c;如度中心性、接近中心性、介数中心性等。它还支持社区检测算法&#xff0c;可以帮助用户发现网络中的群组和社区结构。此…
最新文章