Python进阶语法之推导式

news2025/1/4 12:08:56

目录

目录

前言

思维导图

1.普通写法

1.1代码解读

1.2,结果展示 

2.列表推导式

2.1,重要

2.2,列表推导式初步写法

2.2.1,代码解读 

2.2.2,结果展示 

2.3,列表表达式之条件判断式 

2.3.1,代码解读

2.3.2,结果展示 

2.4,进行两层for循环

2.4.1,代码解读

2.4.2,结果展示

2.5,普通写法与列表推导式的运行时间比较

2.5.1,代码解读

2.5.2,结果展示

2.6,列表内部变量与外部互不干扰

2.6.1,代码解读

2.6.2,结果展示

2.7, 列表推导式还支持嵌套

2.7.1,代码解读

2.7.2,结果展示

3.字典推导式

3.1,生成字典列表

3.1.1,代码解读

 3.1.1,结果展示

3.2,遍历具有键值关系的列表生成字典

3.2.1,代码解读

 3.2.1,结果展示

4.集合推导式

4.1.1,代码解读

4.2,结果展示

5.元组推导式

5.1,代码解释

5.2,结果展示

6.总结 


前言

本章是对自己学完基础语法后,学习python进阶语法推导式过程中,自己的一些理解和看法,因为自己从刚开始第一次看看不懂,到学习一段时间后,通过积累再次看这里的知识点发现自己有了新的理解,这次将这部分知识学完了,剩下就是通过练习来达到熟练了.

本章的推导式,包含列表推导式,字典推导式,集合与元组推导式这四种.

思维导图

1.普通写法

1.1代码解读

                          列表推导式最常见的场景就是优化简单循环。

如果我们需要一个将列表中元素变为原来二倍的程序,那么我们通常会使用下面的普通写法.

这里我们创建了一个列表,列表中含有三个元素,然后创建一个新的列表用于存储变为2倍的元素,接下来我们只需要使用for循环将旧列表中的元素每一项取出变为2倍,最后放入列表中,最后打印出来即可. 

# for 循环式写法
my_list = [1, 2, 3]
new_list = []
for i in my_list:
    new_list.append(i*2)
print(new_list)

1.2,结果展示 

2.列表推导式

2.1,重要

重要:              !!!         列表推导式为从左向右运行       !!!     (后面的式子会一直用到)

第一个元素是向列表赋值的元素

2.2,列表推导式初步写法

2.2.1,代码解读 

对上述代码进行化简,就变成了下面的式子.

我们主要解释列表中的表达式,还是上面说的从左往右看,不用管第一个,第一个是迭代对象,是后面的for循环每一次进行取值后,前面的元素就进行一次计算,然后将值存储在列表中.

my_list = [1, 2, 3]
my_list = [i*2 for i in my_list]
print(my_list)

2.2.2,结果展示 

           这里我们看到得到的结果和上面的化简前的一致,证明我们的想法没有错误.

2.3,列表表达式之条件判断式 

2.3.1,代码解读

                       这里我们增加一个进行条件判断的表达式

这里我们看到多了一个if条件判断,记得程序是从左向右运行的,那么其中的i就是迭代元素,所以从for从列表中取出元素后,进行一次判断,然后再把符合的元素进行计算然后赋值

# 增加一个判断条件的列表推导式
my_list = [1, 2, 3]
new_list = [i*2 for i in my_list if i>1]
print(new_list)

2.3.2,结果展示 

2.4,进行两层for循环

2.4.1,代码解读

这里我们进行两层for循环,如果觉得代码看着复杂,这里我们可以将for循环看成嵌套for-for循环,先进行x的0然后进行y的0,1,2,后面的依次进行.

也就是进行全排列,输出的元素为元组

# 优化两层 for 循环
list = [(x,y) for x in range(3) for y in range(3)]
print(list)

2.4.2,结果展示

2.5,普通写法与列表推导式的运行时间比较

2.5.1,代码解读

这里我们先是导入了time模块,然后我们定义了两个函数分别使用普通方法和列表推导式的写法进行相同的操作,然后调用函数和方法分别判断不同函数运行所用的时间,

import time

def demo1():
    new_list = []
    for i in range(10000000):
        new_list.append(i*2)

def demo2():
    new_list = [i*2 for i in range(10000000)]

s_time1 = time.perf_counter()
demo1()
e_time1 = time.perf_counter()

s_time2 = time.perf_counter()
demo2()
e_time2 = time.perf_counter()

print("demo1() 代码运行时间:", e_time1-s_time1)
print("demo2() 代码运行时间:", e_time2-s_time2)

2.5.2,结果展示

                通过结果很直观的看出列表推导式运行的速度要快很多

2.6,列表内部变量与外部互不干扰

2.6.1,代码解读

                  定义了x,但是列表表达式中也有x结果会不会受到影响呢

x = 6
# 互不干扰,相互不影响
my_var = [x*2 for x in range(3)]

print(my_var)
print(x)

2.6.2,结果展示

2.7, 列表推导式还支持嵌套

2.7.1,代码解读

这里我们主要解释这个代码的运行顺序,还是从左往右进行,但是因为第一个for需要内部列表中的元素,所以先进行内部元素的运算,运算完内部列表后,再将内部列表运算得到的结果,进行进一步运行,最后得到最外面列表的结果.

my_var = [y*4 for y in [x*2 for x in range(3)]] # 内部生成0,2,4
print(my_var) # 0 ,8 ,16

2.7.2,结果展示

3.字典推导式

3.1,生成字典列表

3.1.1,代码解读

这里按照正常的想法,为forfor循环为6个值,但是在字典中不能有相同的值key-value不能一致,当第一次运行时key为0,,后面出现value=0就会被覆盖,所以只能为value=1

my_dict = {key: value for key in range(3) for value in range(2)}
print(my_dict) 

 3.1.1,结果展示

3.2,遍历具有键值关系的列表生成字典

3.2.1,代码解读

       这里我们的字典推导式,会将列表中的每一项元组中的元组,分为键和值,组成字典

my_tuple_list = [('name', '橡皮擦'), ('age', 18),('class', 'no1'), ('like', 'python')]
my_dict = {key: value for key, value in my_tuple_list}
print(my_dict)

 3.2.1,结果展示

4.集合推导式

4.1.1,代码解读

因为集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样,使用的时候很容易晕掉。

my_set = {value for value in 'HelloWorld'}  
print(my_set)

4.2,结果展示

5.元组推导式

5.1,代码解释

使用元组推导式生成的结果并不是一个元组,而是一个生成器对象

my_tuple = (i for i in range(10))
print(my_tuple) 

5.2,结果展示

6.总结 

本章主要是对python进阶语法推导式,的练习与理解,同时也提高了自己对代码的简化和运行的能力的提高,也是在这次学习中,我发现学习代码更多需要的是对基础和知识的积累,当眼界与思维突破瓶颈,看之前难以理解的事物发现变的容易去使用和理解了.

 每日一言

冬天之所以那么冷是为了告诉大家身边人的温暖有多重要。

  如果我的学习笔记对你有用,不妨点赞收藏一下,感谢你的支持,当然也欢迎大佬给我一下建议或是对笔记中的不足进行补充,对我学习大有帮助,谢谢。  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PowerQuery】Excel 的自动刷新功能-最低一分钟刷新

在Excel集成了PowerQuery之后,它提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接…

Python绘图——生存曲线

今天我们将一起学习如何利用Python中____lifelines包_____建模和分析生存数据并用plot_绘制生存曲线,以及更改其样式如标题字号大小,坐标轴及图例设置等,使用Python即可绘制出SCI论文图!___” lifelines包 lifelines 是一个 Pyt…

猫头虎的技术笔记:Spring Boot启动报错解决方案

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

算法竞赛个人注意事项

浅浅记录一下自己在算法竞赛中的注意事项。 数据类 注意看数大小,数学库中的函数尽量加上 * 1.0,转成double,防止整型溢出。,int型相乘如果可能溢出,乘 * 1LL。 数据范围大于1e6,注意用快读。 浮点数输…

桉木建筑模板与其他常见建筑模板材料相比有什么优势?

桉木建筑模板与其他常见建筑模板材料相比具有以下优势: 1. 强度和稳定性:桉木具有较高的密度和硬度,使其具备出色的抗弯和抗压能力。相比于其他常见建筑模板材料如胶合板或钢模板,桉木建筑模板能够更好地承受施工期间的荷载和压力…

类和对象的基本概念

目录 c和c中结构体的区别 类的封装 c语言中的行为和属性封装存在的问题 c中对事物的封装——类的封装 尽量将成员变量设置为private 代码示例 c和c中结构体的区别 c语言中struct只有变量,不能存放函数,也就是数据(属性)和行为&#xf…

学信息系统项目管理师第4版系列06_项目管理概论

1. 项目基础 1.1. 项目是为创造独特的产品、服务或成果而进行的临时性工作 1.1.1. 独特的产品、服务或成果 1.1.2. 临时性工作 1.1.2.1. 项目有明确的起点和终点 1.1.2.2. 不一定意味着项目的持续时间短 1.1.2.3. 临时性是项目的特点,不是项目目标的特点 1.1…

什么是 DNS 隧道以及如何检测和防止攻击

什么是 DNS 隧道? DNS 隧道是一种DNS 攻击技术,涉及在 DNS 查询和响应中对其他协议或程序的信息进行编码。DNS 隧道通常具有可以锁定目标 DNS 服务器的数据有效负载,允许攻击者管理应用程序和远程服务器。 DNS 隧道往往依赖于受感染系统的…

记一起小意外事件引起的批量重命名文件名

一、事件描述 某次,因某业务系统迁移,一线人员对业务目录误操作,执行打包命令过程中导致Tomcat下的web应用程序无法使用,检查后发现项目下所有文件名都加了gz格式;询问一线,发现是对项目目录执行了:gzip -r ./tomcat导致程序文件找不到;报错如下: 二、事件处理 1、查看…

联表查询的时候外键id是字符串

联表查询的时候外键id是字符串 例: 第一种:可以使用:FIND_IN_SET 关键字进行查询(推荐) SELECTt.task_name,t.task_id,t.common_ids,t.task_description,t.task_type,t.task_state,t.task_start_time,t.task_end_tim…

算法-88.合并两个有序数组-⭐

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组…

在Qt5中SQLite3的使用

一、SQLite简要介绍 什么是SQLite SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,S…

【AI】机器学习——感知机

文章目录 4.1 感知机基本概念4.2 策略4.2.1 数据集的线性可分性4.2.2 学习策略目标损失函数的构造关于距离的解释 4.3 算法4.3.1 原始形式损失函数的梯度下降法 4.3.2 PLA例题4.3.3 算法收敛性 4.4 PLA对偶形式4.4.1 原始PLA分析4.4.2 PLA对偶形式4.4.3 优点 4.1 感知机基本概念…

理财是什么?怎样学习理财?

大家好,我是财富智星,今天跟大家分享一下理财是什么?怎样学习理财的方法。 一、理财的基本原则 1、理财应注重投资而不是投机,要与时间为友。 让我们先考虑以下问题:什么样的回报才算是真正的高回报?假设有…

HTML5 进阶知识

简答题 什么是 HTML5 标签的语义化&#xff1f; HTML5 标签的语义化是指使用具有语义意义的标签来描述网页内容。例如&#xff0c;使用 <header> 标签来表示页眉&#xff0c;使用 <main> 标签来表示主要内容区&#xff0c;使用 <footer> 标签来表示页脚。 什…

Wireshark 用命令行分析数据包

1&#xff0c;那些情况需要使用命令行 Wireshark一次性提供了太多的信息。使用命令行工具可以限制打印出的信息&#xff0c;最后只显示相关数据&#xff0c;比如用单独一行来显示IP地址。命令行工具适用于过滤数据包捕获文件&#xff0c;并提供结果给另一个支持UNIX管道的工具…

Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决

本文主要讲述了Yolov5如何训练自定义的数据集&#xff0c;以及使用GPU训练&#xff0c;涵盖报错解决&#xff0c;案例是检测图片中是否有救生圈。 最后的效果图大致如下&#xff1a; 效果图1效果图2 前言 系列文章 1、详细讲述Yolov5从下载、配置及如何使用GPU运行 2、…

最新仿闲鱼链接+独立后台管理 跳转APP

2024最新仿xy链接源码 后台一键生成链接&#xff0c;后台管理教程&#xff1a;解压源码&#xff0c;修改数据库config/Congig 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

JS防抖和节流在前端开发中的应用场景

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 防抖&#xff08;Debouncing&#xff09;⭐ 节流&#xff08;Throttling&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端…

C++与C编译后符号表对比(一百九十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…