python的推导式编程

来源:互联网 发布:mysql高并发解决方案 编辑:程序博客网 时间:2024/05/12 05:25

最近看了一篇文章一行python代码,刚一开始看,惊呆了,python竟然可以这样写,大牛绝逼是大牛。事后仔细了解了一下代码和作者,作者的确是大牛,但发现一行python代码并不是多么神秘,反而很简单,就是python的推导式。
我先写一个简单地列表推导式:

[x for x in range(5)]

结果:

[0,1,2,3,4]

还可以用表达式代替x的位置:

[x*x for x in range(5)]

结果:

[0,1,4,9,16]

函数也可以:

a=lambda x:x*x[a(x) for x in range(5)]

结果:

[0,1,4,9,16]

通过上面的例子,我们可以发现列表的推导式就是起到了for循环的作用。其实推导式还可以有更大的作用,就是可以用if语句做判断,请看线面的例子:

[x for x in range(5) if x!=3]

结果:

[0,1,2,4]

像上面的例子中if语句是在for语句之后的,其实还可以放在for之前,但是,if语句必须要有else分支,也就是说放在外面是先判断再进行运算,即最后的列表长度不一定是5,如果放在前面,最后列表的长度必须是5.

[x if x!=3 else 0 for x in range(5)]

结果:

[0,1,2,0,4]

经过简单介绍,我们发现利用python的推导式可以完全替代for循环的简单功能。除此之外,我们平时还会用到for循环的嵌套,利用列表的推导式也能实现这一功能。

['%d %d'%(x,y) for x in range(2) for y in range(2)]

结果:

['0 0','0 1','1 0','1 1']

上面的例子虽然也实现了for语句的嵌套功能,但是,你仔细看输出会发现x在外部,y在内部,用的时候要注意。如果想写的符合我们一般的逻辑,即后面的循环在外部,前面的循环在内部,可以这样写:

[['%d %d'%(x,y) for x in range(2)] for y in range(2)]

结果:

[['0 0','1 0'],['0 1','1 1']]

以上就是python中列表推导式的应用和我自己使用的经验,除此之外,推导式还可以在字典和集合中使用,详情见Python中的推导式使用详解

0 0
原创粉丝点击