Python进阶语法之推导式

简介: 本章是对自己学完基础语法后,学习python进阶语法推导式过程中,自己的一些理解和看法,因为自己从刚开始第一次看看不懂,到学习一段时间后,通过积累再次看这里的知识点发现自己有了新的理解,这次将这部分知识学完了,剩下就是通过练习来达到熟练了.本章的推导式,包含列表推导式,字典推导式,集合与元组推导式这四种.主要是对python进阶语法推导式,的练习与理解,同时也提高了自己对代码的简化和运行的能力的提高,也是在这次学习中,我发现学习代码更多需要的是对基础和知识的积累,当眼界与思维突破瓶颈,看之前难以理解的事物发现变的容易去使用和理解了.

前言


版权声明:本文为本博主在CSDN的原创文章搬运而来,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        

原文链接:https://blog.csdn.net/weixin_72543266/article/details/132656665


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

思维导图

image.gif

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)

image.gif

1.2,结果展示

image.gif

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)

image.gif

2.2.2,结果展示

image.gif

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

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)

image.gif

2.3.2,结果展示

image.gif

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)

image.gif

2.4.2,结果展示

image.gif

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)

image.gif

2.5.2,结果展示

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

image.gif

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

2.6.1,代码解读

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

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

image.gif

2.6.2,结果展示

image.gif

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

image.gif

2.7.2,结果展示

image.gif

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)

image.gif

3.1.1,结果展示

image.gif

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)

image.gif

3.2.1,结果展示

image.gif

4.集合推导式

4.1.1,代码解读

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

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

image.gif

4.2,结果展示

image.gif

5.元组推导式

5.1,代码解释

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

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

image.gif

5.2,结果展示

image.gif

6.总结

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


每日一言

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


相关文章
|
6天前
|
程序员 Python
Python列表推导式:简洁与高效的艺术
Python列表推导式:简洁与高效的艺术
196 99
|
3月前
|
测试技术 数据处理 Python
Python列表推导式:简洁高效的数据处理利器
Python列表推导式:简洁高效的数据处理利器
247 80
|
1月前
|
安全 测试技术 数据处理
Python列表推导式进阶:从简洁代码到高效编程的10个核心技巧
列表推导式是Python中高效的数据处理工具,能将多行循环代码压缩为一行,提升代码可读性与执行效率。本文详解其基础语法、嵌套循环、条件表达式、函数融合、性能优化等进阶技巧,并结合实战案例与边界条件处理,帮助开发者写出更优雅、高效的Python代码。
114 0
|
10月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
233 7
|
4月前
|
存储 数据采集 大数据
Python推导式进阶指南:优雅初始化序列的科学与艺术
本文系统讲解Python推导式的用法与技巧,涵盖列表、字典、集合推导式及生成器表达式。通过代码示例和性能对比,展示推导式在数据结构初始化中的优势:简洁高效、执行速度快30%-50%。文章分析基础语法、核心应用场景(如序列构造、键值对转换、去重运算)及嵌套使用,并探讨使用边界与最佳实践,强调可读性优先原则。最后指出,合理运用推导式能显著提升代码质量和处理效率,同时避免过度复杂化的陷阱。
107 0
|
6月前
|
Python
课时19:Python的基本语法
今天给大家带来分享的是 Python 的基本语法,分为以下六个部分。 1.在 Python 中严格区分大小写 2.Python 中的每一行就是一条语句,每条语句以换行结束 3.Python 中每一行语句不要过长 4.条语句可以分多行编写,语句后边以\结尾 5.Python 是缩进严格的语言,不要随便写缩进 6.在 Python 中使用#来表示注释
115 2
|
10月前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
410 61
|
8月前
|
存储 开发者 Python
python基本语法
Python的基本语法简洁而强大,支持多种编程范式,包括面向对象编程和函数式编程。通过掌握变量和数据类型、操作符、控制结构、函数、类和模块等基本概念,可以有效地编写高效、可读的Python代码。无论是初学者还是经验丰富的开发者,Python都提供了丰富的工具和库来满足各种编程需求。
272 13
|
10月前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
204 1

推荐镜像

更多