Python学习开发交流 2017-05-10 11:11:00 列表推导式并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码 初识列表 现在请创建一个list,元素为1到9的整数,先用普通方法做
用了3行代码完成了这个功能,现在用列表推导式来做 lst = [i for i in range(10)] 仅仅是一行代码哦,一行代码就能解决的问题,就没必要用三行代码去做 创建一个列表,元素为10以内的偶数,方法1 lst = [i for i in range(2,10,2)] 方法2 lst = [i for i in range(2,10) if i%2 == 0] 小做总结 讲到这里,我必须稍微的做一个总结了,for语句前面的表达式,经过计算,最终留在新建的list列表中,for循环是一个不断取值的过程,而满足if语句的元素才有资格参与for语句前面的表达式计算。 我这样讲,可能你还是不能够理解,换一个新的例子,创建一个列表,元素为10以内偶数的平方 lst = [i*i for i in range(2,10) if i%2 == 0] 程序解读:
配合函数 for语句前面的表达式在某些情况下,仍然不能够满足实际需要,比如下面的要求,创建一个list,元素为10以内的偶数的平方,如果元素的个位数是6,则该元素的值转为字符串。 根据要求,新创建的列表内容应当为[4, '16', '36', 64],你现在知道for语句前面的内容是表达式,更进一步,他们是lambda表达式,关于这个概念,我后续会介绍,想要用lambda表达式来完成这个功能,是比较困难的,这种情况下,可以配合函数来做,代码如下
列表推导式更快 列表推导式不仅仅是让程序更简洁,其速度也比普通方法快,下面是一段测试比较代码
这段代码里用到了装饰器,后续我也会讲,程序运行的结果如下: func1用时0.144474029541 func2用时0.0513877868652 可以明显的看到,使用列表推导式,创建相同内容的列表,要比普通方法快接近3倍的速度 列表推导式总结优点
缺点 如果使用不当,会造成阅读困难。 写出别人难以理解的代码是非常容易的,如果再用心些,写出一份几天后自己都看不懂的代码也不是什么难事,真正难的是写出别人看得懂的代码,列表推导式虽然简洁,但一味的简洁,在推导式里写上一堆的代码,就造成理解困难,比如下面的题目: a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 将这个嵌套列表转成一维列表,转换后,列表内容为 [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果用列表推导式,则可以这样写
上面的代码我已经不想去解释了,如果是用普通方法,则可以这样写
这两份代码,你更喜欢用哪一个呢? |
|