欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 推导式的使用方式(代码整洁性、高级感必备!)

程序员文章站 2022-04-02 11:11:21
推导式是python语言的一个特色所在,也是python吸引人的地方之一。使用推导式可以将某些多级for循环及if判断语句综合到一行代码中,能够在很大程度上减少代码量,减少缩进,提升代码整洁性,也同时能够加快命令的执行速度。快来学习一下python推导式的使用方式吧,你一定会爱上这种方式的!...

python 推导式的使用方式(代码整洁性、高级感必备!)

前不久碰上了一个同学,和他交流了一下写代码的感想,正好他也是使用python比较多,然后他给我提了一些我可以改善的地方,比如说多使用类、使用argparse、使用推导式等,我觉得这些都是挺好用的东西,本次就简单介绍一些推导式吧。

推导式实际上就是能够将多个for循环、if判断等写到一行代码中,运行这行代码就能够生成一个列表或者一个字典或者一个集合。从这句介绍中就能看出,一行代码就能写for循环、if判断,是真的很方便啊。从网上能看到的文章中都能看到介绍说推导式是python一个必会的特色,使用推导式能让工作更方便且使任务更加省时,事实也确实是这样。那接下来就看一下推导式到底优点在哪里吧!


推导式的形成就是多个for循环以及if语句的混合,也就是会有多层嵌套

列表推导式

正如其名,列表推导式生成的就是一个列表。先看一下不用推导式的情况:

l = []# 创建一个列表用于存放之后的结果

for first in ['A','B']:
	for second in ['A','B']:
		for third in ['A','B']:
			l.append(lfirst,second,third])
print(l)

执行结果如下:
python 推导式的使用方式(代码整洁性、高级感必备!)
那使用列表推导式呢:

# print([[first,second,third] for first in ['A','B'] for second in ['A','B'] for third in ['A','B']])

# 这里为了更好看,我就使用\换行将一行代码分到多行啦!但是实际上就只是一行哦。
print([[first,second,third] \
	for first in ['A','B'] \
	for second in ['A','B'] \
	for third in ['A','B']])

这里执行的结果和上面一样:

python 推导式的使用方式(代码整洁性、高级感必备!)
看出来了没,是不是很方便,将for循环写在一行上面,这样缩进就会更少,代码可读性也更好了。来分析一下这行代码,实际上就是first、second、third三个元素都进行了一次for循环,但是由于for循环的执行是有顺序的,因此最终使得结果中出现了各种组合形式,也就是说这里的一行代码和之前的好几行代码的执行结果是一样的。

接下来就注意一下,推导式的执行顺序。你应该知道列表中的元素是有顺序的,因此结果的列表中的元素也是一个一个加进去的,从结果中看出最开始生成AAA、再生成AAB,再生成ABA,再生成ABB。。。怎么样,看出来了咩?第一个元素也就是first的在结果中的前几项都是A,也就是说这里first暂停循环了,其在等待后面两项的第一轮循环结束,待second与third项生成BB也就是一轮循环结束后,first项变成了B,开始生成BAA、BAB等。从这里我们就能推知在推导式中从左到右的顺序就是for循环的执行顺序,最左边就是最外层,向右依次递减。

接下来再看一个含有if判断的推导式吧:

print([x \
	for x in range(7) \
	if x > 2 \
	for y in range(6,10) \
	if x == y])

还是如上面一样,从左到右的顺序,不使用推导式的话就长这样:

list = []
for x in range(7):
	if x > 2:
		for y in range(6,10):
			if x==y:
				list.append(x)
print(list)				

结果就不展示啦,list就只有一个元素为6.

还有的情况是if、else写到一行形成列表式的情况:

print([x if x >5 else 1 for x in range(10)])	
# 执行结果为:[1, 1, 1, 1, 1, 1, 6, 7, 8, 9]
# 这里代码的意思就是对10以内的整数x进行迭代,
# 如果x>5那么就将x放入列表,但是如果x不符合>5,那么就将1加入列表。	

除此外,列表推导式内还可以再嵌套推导式哦!见下例子:

print([[a,b] \
	for a in \
	[x \         			
	# 这里是上面的列表
	for x in range(7) \ 	
	#这里是上面的列表
	if x > 2 \				
	# 这里是上面的列表
	for y in range(6,10) \	
	# 这里是上面的列表
	if x == y ] \			
	# 这里是上面的列表
	for b in ['A','B']])	
# 由于\后不能有其它字符,我将注释写在下一行啦
# 执行结果为[[6, 'A'], [6, 'B']]	,应该没啥问题,这里也不再解释啦

看了这么多例子,对推导式有一点了解了吧,应该是觉得十分方便吧。开始想要上手的时候可能还有点不熟悉,但是只要多多使用,推导式必定会对你的工作帮助很大,你也会越来越喜欢使用推导式的。

字典推导式与集合推导式

实际上各种推导式的原理都类似,因此字典和集合推导式我简单举个例就过啦。

字典推导式

字典推导式就是生成字典的推导式,当你需要字典时就可以考虑使用字典推导式。直接看例子吧:

B = 'NAN'
print({A:B for A in range(5)})

结果如下,不再解释啦:
python 推导式的使用方式(代码整洁性、高级感必备!)

集合推导式

与列表的区别在于集合不含重复元素,集合内部无序,需要使用大括号{}

print({a%5 for a in range(10)})
# 计算余数,由于有重复,重复部分被去除

结果:python 推导式的使用方式(代码整洁性、高级感必备!)

叮!

使用推导式的优点现在就很明显啦,方便、简洁、代码量少,缩进少,命令执行速度快(当然这个我没有证明,但是我看到有人说速度能快51%呢)。当然不是所有时候都适合用推导式哦,如果嵌套层数过多,修改代码可能很麻烦,同时也不易发现错误。当然写起来更麻烦。有的非常简单的情况可能也用不上推导式,因此根据自己的工作需要使用推导式是最好的。但是使用推导式绝对是能提升你的代码整洁性和高级感的,哈哈哈!!!

参考:https://blog.csdn.net/weixin_42057852/article/details/81120278
参考:https://www.cnblogs.com/tkqasn/p/5977653.html
参考:https://baijiahao.baidu.com/s?id=1644982404672862518&wfr=spider&for=pc

本文地址:https://blog.csdn.net/keepaware/article/details/109443923

相关标签: python