列表推导式 生成器表达式

推导式 comprehensions(又称解析式):是 Python 中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点

列表推导式 就是一个简单的公式,我们用这个列表推导式,把你好几行的for循环的过程给一行能解决掉,但是这个过程你必须放在列表的框中[  ]

一般用法:

#循环模式
#[经过加工的i for i in 可迭代对象]

 

#筛选模式
#[经过加工的i for i in 可迭代对象 if 条件 筛选]

 

比如你要将1-12的数字都加入一个列表中 ,这个时候你用for是最简便的

li = []  #新建一个列表  把所有的信息都加入其中
for i in  range(1, 12):  #循环遍历1-12
    li.append(i)
print(li)

#你以为这就是你最简便的方法吗 NO 最简便的方式 在下面呢
这就是列表的推导式
l1 = [i for i in range(1,13)]  #用列表的推导式来 做
print(l1)


生成器表达式:

其实就是和列表推导式 差不多 但是它的外部用的不是列表号  而是括号

l_obj = ('python %s期'% i for i in range(1,12))  #生成器生程式就是和列表推导式换了括号
print(l_obj)
print(l_obj.__next__())  #打印这个生成器生成式第一个元素
print(l_obj.__next__())#打印这个生成器生成式第二个元素

 

#列表推导式:一目了然,占内存。
#生成器表达式:不易看出,节省内容。

推导式练习:

l2 = [i*i for i in range(1,11)]   #用列表推导式来做一个1-10的所有数字的平方
print(l2)

#打印1-9的偶数
l3 = [i for i in range(1,10) if i %2 == 0]  
print(l3)

#打印1-30内的所有的能整除3的数字
l3 = [i for i in range(31) if i %3 == 0]
print(l3)

#求一个列表中的嵌套的列表 然后把里面的元素含有两个e的元素打印出来
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
m = [name for i in names for name in i if name.count('e')==2]
print(m)

推导式前面加返回的变量  后面就是for循环然后和可迭代的对象  还可以加其他的判断语句

生成器生程式只是列表的推导式给它的括号 改变下 然后生程式的取值也是按照__next__()方法来取值的

字典的推导式:

#去一个字典中的key对应的value的key给返回出来
mcase = {'a':10,'b':34}
mcase_freque={ mcase[k]:k for k in mcase}  #把字典中的对应的key和value翻转并且给输出
print(mcase_freque)

 

posted @ 2018-04-04 20:17  可爱的红领巾  阅读(277)  评论(0编辑  收藏  举报