python 列表推导 为什么快_Python中简单的列表推导式,却能解决复杂的问题,你学会了吗?...

Beautiful is better than ugly. ------Python之禅

01【引子】

我们知道,Python是一门简单、易学的编程语言,“Python之禅”里面很多想法融入到这门语言的方方面面。

44461187974d5976a3b17dc40de084ab.pngPython之禅

你可以通过“import this”来了解"Python之禅"哦!

但是,小伙伴们,它真的简单吗?

62c28b632a7db41b1255d946f100d43f.png保持简单

让我们来看一看Python写的下面一段:

print('\n'.join([''.join([('love'[(x-y)%len('love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else ' ')for x in range(-30,30)])for y in range(30,-30,-1)]))

ad4ee9f9f3a06489799b3ad15dda99ea.png是不是很难懂

哪个小伙伴能轻松读懂这句话呢?

02【这句话干了什么?】

我们先不分析,将这句话粘贴到编译器中看看结果吧(将编译器字体设置为非等宽字体)!

f51f9bc9d06467750151fbfd1aa20eaf.png程序运行结果

对,你没看错,情人节的礼物先到了!

08036ef8c1fc8036b1f3107052b01236.png情人节的礼物

短短的一行代码打印出了如此复杂的图案!这是怎么回事?

03【列表推导式】

熟悉Python的小伙伴肯定一眼就能看出来,这里使用了列表推导式(List Comprehensions),它是Python内置的非常简单却强大的,可以用来创建列表的推导式。

上面例子中其实是将我们生成的列表通过join()函数连接成了字符串的效果。

先来看一个简单的例子

print([i ** 2 for i in range(10)])

>>>

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

这个例子是将0-9的平方数打印出来。上面的例子其实等价于

lst = []

for i in range(10):

lst.append(i)

print(lst)

无形中节省了4行代码。上面那一句中print()函数里包裹的我们称之为列表推导式。它大概长这样:

[表达式 for 迭代变量 in 可迭代对象]

或者加入判断,比如,我们想挑出0-9平方数里面大于50的数并打印。

print([i ** 2 for i in range(10) if i ** 2 > 50])

加入判断后,格式应该是这样的:

[表达式 for 迭代变量 in 可迭代对象 if 条件语句]

04【字典推导式】

这个列表推导式不仅仅适用于列表,其他可迭代对象,如字典等都可以使用类似的方法。只不过名称要稍微变一下哦。列表叫列表推导式,那字典就叫字典推导式咯,看下面的例子。

a108add23b4868f06d1a04532bc5a76c.png字典同样适用

dic = {1:'Alex', 2:'boby', 3:'cerry', 4:'Dallen', 5:'evea'}

如果我们想打印输出时将字典中的值都改为标题格式(第一个字母大写),如何处理呢?

tmp_dic = {}

for key in dic.keys():

tmp_dic[key] = dic.get(key, None).title()

print(tmp_dic)

使用字典推导式就相对简单一点了,就一句话。如下

print({i:j.title() for i, j in zip(dic.keys(), dic.values())})

05【列表推导式还有哪些骚操作呢?】

最近在网上整理了一些Python一句话能实现的一些案例。大家参考下!

一句话打印输出26个字母

print(''.join([chr(i) for i in range(97,123)]))

d90e2ef35fb832efb630a1ecf20d6dde.png打印输出26个字母

一句话打印乘法口诀

print('\n'.join([' '.join(["%2s x%2s = %2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))

efd7812616f1fc18eb0ebc2784301776.png一句话打印乘法口诀

一句话打印一个迷宫

print(''.join(__import__('random').choice('\u2571\u2572') for i in range(50*24)))

9bb562bf5449e008d71d8d61099dae9a.png一句话打印迷宫

06【写在最后】

看了这些一句话产出的东西,大家肯定觉得头大了,不知所以然,或许只有作者理解其中的意思。因此,这里建议大家涉及多个循环嵌套的列表推导式,还是脚踏实地,一步一步写比较好,不然时间长了自己都不认识了(或者自己再去理解得花费很长时间),这跟Python之禅中“Beautiful is better than ugly.”是冲突的。

59e82ce5cd9855e950395aaf6e5683e8.png娱乐即可

上面的内容,大家娱乐下就好了,能理解当然更好,祝大家新年快乐!

觉得好看不要吝啬您的赞,您的评论点赞是我写下去的动力,喜欢Python的小伙伴关注我,后续推出更加精彩的内容,[emm]你也可以关注我往期的内容哦!

本文作者原创,转载请私信作者!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值