Python进阶-列表推导式详解总结

列表推导式并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码

初识列表

现在请创建一个list,元素为1到9的整数,先用普通方法做


lst = []

for i in range(10):

 lst.append(i)

用了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 语句前面的表达式是i*i

  • i 的值从2变化到9,但不是每一个i的值都会参加i*i的计算,i的值必须满足if条件语句才行

配合函数

for语句前面的表达式在某些情况下,仍然不能够满足实际需要,比如下面的要求,创建一个list,元素为10以内的偶数的平方,如果元素的个位数是6,则该元素的值转为字符串。

根据要求,新创建的列表内容应当为[4, ‘16’, ‘36’, 64],你现在知道for语句前面的内容是表达式,更进一步,他们是lambda表达式,关于这个概念,我后续会介绍,想要用lambda表达式来完成这个功能,是比较困难的,这种情况下,可以配合函数来做,代码如下

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容

def func(i):

 res = i * i

 if res % 10 == 6:

 return str(res)

 return res

lst = [func(i) for i in range(2,10) if i % 2 == 0]

print lst

列表推导式更快

列表推导式不仅仅是让程序更简洁,其速度也比普通方法快,下面是一段测试比较代码


#coding=utf-8

import time

#装饰器函数

def timefunc(func):

 def newfunc(*args,**kwargs):

 t1 = time.time()

 lst = func(*args,**kwargs)

 t2 = time.time()

 diff = t2 - t1

 print u'{func}用时{diff}'.format(diff=diff,

 func=func.func_name)

 return lst

 return newfunc

@timefunc

def func1(count):

 lst = []

 for i in range(count):

 lst.append(i)

 return lst

@timefunc

def func2(count):

 lst = [i for i in range(count)]

 return lst

count = 1000000

func1(count)

func2(count)

这段代码里用到了装饰器,后续我也会讲,程序运行的结果如下:

func1用时0.144474029541

func2用时0.0513877868652

可以明显的看到,使用列表推导式,创建相同内容的列表,要比普通方法快接近3倍的速度

列表推导式总结优点

  1. 简洁

  2. 高效

缺点

如果使用不当,会造成阅读困难。

对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,教你如何实现边学习边用Python赚钱的学习方式。点击加入我们的 python学习者聚集地

写出别人难以理解的代码是非常容易的,如果再用心些,写出一份几天后自己都看不懂的代码也不是什么难事,真正难的是写出别人看得懂的代码,列表推导式虽然简洁,但一味的简洁,在推导式里写上一堆的代码,就造成理解困难,比如下面的题目:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

将这个嵌套列表转成一维列表,转换后,列表内容为

[1, 2, 3, 4, 5, 6, 7, 8, 9]

如果用列表推导式,则可以这样写


a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

b = [j for i in a for j in i]

print(b)

上面的代码我已经不想去解释了,如果是用普通方法,则可以这样写


a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

b = []

for i in a:

 for j in i:

 b.append(j)

print b

这两份代码,你更喜欢用哪一个呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值