列表推导式 生成器表达式
推导式 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)