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


每日一言

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


相关文章
|
2月前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
67 4
|
24天前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
25天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
24 2
|
2月前
|
Python
探索Python中的列表推导式
【10月更文挑战第20天】在编程世界里,时间就是一切。Python的列表推导式是节约时间、简化代码的一大利器。本文将带你深入理解并有效利用这一强大工具,从基础到高级用法,让你的代码更加简洁高效。
|
1月前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
31 2
|
2月前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!
|
2月前
|
C语言 开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第21天】在Python的世界里,代码的优雅与效率同样重要。列表推导式(List Comprehensions)作为一种强大而简洁的工具,允许开发者通过一行代码完成对列表的复杂操作。本文将深入探讨列表推导式的使用方法、性能考量以及它如何提升代码的可读性和效率。
|
2月前
|
数据处理 开发者 Python
Python中的列表推导式:一种优雅的代码简化技巧####
【10月更文挑战第15天】 本文将深入浅出地探讨Python中列表推导式的使用,这是一种强大且简洁的语法结构,用于从现有列表生成新列表。通过具体示例和对比传统循环方法,我们将揭示列表推导式如何提高代码的可读性和执行效率,同时保持语言的简洁性。无论你是Python初学者还是有经验的开发者,掌握这一技能都将使你的编程之旅更加顺畅。 ####
41 1
|
2月前
|
开发者 Python
探索Python中的列表推导式:简化代码的利器
在Python编程中,列表推导式是一种简洁而强大的工具,它允许开发者以一行代码实现复杂的列表操作。本文将深入探讨列表推导式的语法、优势以及实际应用,帮助读者更好地利用这一特性来优化代码。