博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python开发函数进阶:生成器表达式&各种推导式
阅读量:6514 次
发布时间:2019-06-24

本文共 3287 字,大约阅读时间需要 10 分钟。

一,生成器表达式

#生成器表达式比列表解析更省内存,因为惰性运算

1 #!/usr/bin/env python2 #_*_coding:utf-8_*_3 4 new_2 = (i*i for i in range(100))  #生成器表达式5 print(list(new_2))6 #注意括号是小括号

对比

#!/usr/bin/env python#_*_coding:utf-8_*_# egg_list=['鸡蛋%s' %i for i in range(10)]  列表推倒式# print(egg_list)# laomuji = ('鸡蛋%s' %i for i in range(1,11))  生成器表达式# print(laomuji)# print(next(laomuji))# print(next(laomuji))

 小知识

1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3  4 #小知识 5 def func(): 6     yield from 'ABC'   #相当于下面的for i in  7     # for i in 'ABC': 8     #     yield i 9 g = func()10 print(next(g))

 

二,各种推导式

#推导式套路

# variable = [out_exp_res for out_exp in input_list if out_exp == 2]
# out_exp_res:  列表生成元素表达式,可以是有返回值的函数。
# for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
# if out_exp == 2:  根据条件过滤哪些值可以。

1.列表推导式

1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3  4 #列表推导式 5 #普通版本 6 new_l = [] 7 for i in range(100): 8     new_l.append(i*i) 9 list(range(100))10 #进阶版本11 new_l = [i*i for i in range(100)]  #列表推倒式12 print(new_l)13 14 print(len([ i+5 for i in range(100) if i % 3 == 0 ]))  15 #执行过程  for >> if >> i+5 >> append[i+5]16 #详解过程17 # new_l = []18 # for i in range(100):19 #     if i % 3 == 0:20 #         new_l.append(i+5)21 22 print(len([i//2 if i%2==0 else i for i in range(100) if i % 3 == 0 ]))  #三元运算肯定要返回个值23 #执行过程  for >> 后if >> 前if >> append[i//2]24 #详解过程25 # for i in range(100):26 #     if i % 3 == 0:27 #         if i%2 == 0:28 #             new_l.append(i//2)29 #         else:30 #             new_l.append(i)31 32 33 # 30以内的数字,所有能被3整除的整数34 print([i for i in range(30) if i%3 == 0])35 # 30以内的数字,所有能被3整除的整数的平方36 print([i*i for i in range(30) if i%3 == 0])37 # 找到嵌套列表中名字含有2个'e'的所有名字38 # names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],39 #          ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]40 # print([name for lst in names for name in lst if name.count('e') >=2])  从前往后看41 # 执行过程42 # 第一个for >> 第二个for >> if >> append[name]

 

2.字典推导式

1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3  4 #字典推导式 5 # 将一个字典的key和value对调 6 mcase = {
'a': 10, 'b': 34} 7 for i in mcase: 8 print(i) 9 #[i for i in mcase] #列表推导式10 print({key:key+'1' for key in mcase}) #更改k11 print({key:mcase[key] for key in mcase}) #取values12 print({mcase[key]:key for key in mcase}) #kv 对调13 14 #合并大小写对应的value值,将k统一成小写15 mcase = {
'a': 10, 'b': 34, 'A': 7, 'Z': 3}16 mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}17 print(mcase_frequency)18 # 执行过程19 # for k in mcase >> k.lower() : values >> mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) >> {}20 # mcase.get# (k.lower(), 0) get 到了就返回值,get不到就返回0

 

3.集合推导式

1 #!/usr/bin/env python2 #_*_coding:utf-8_*_3 4 #集合推导式,自带去重功能5 l = [-1,1,2,1]6 print({i for i in l})7 print({i*i for i in l})

 

 小结:练习题

1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3  4 #练习题 5 # 例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 6 str_l = ['a','ab','abc','abcd','abcde'] 7 print([i.upper() for i in str_l if len(i) > 3]) 8 # 例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表 9 print([(x,y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1])10 # 例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]11 M = [[1,2,3],[4,5,6],[7,8,9]]12 print([i[2] for i in M])

 

转载于:https://www.cnblogs.com/jokerbj/p/7291773.html

你可能感兴趣的文章
Task的使用
查看>>
grep和正则表达式
查看>>
s:iterator巧妙控制跳出循环
查看>>
移动互联网思维
查看>>
redis-手写redis切片和非切片连接池并注入springboot中
查看>>
Kosaraju算法详解
查看>>
Serv-U 的升级及数据备份和迁移【转】
查看>>
webstorm无法显示左边文件夹目录的解决方法
查看>>
Android数据保存之文件保存
查看>>
数字校园-云资源平台 2014.10.26-人人通共享空间
查看>>
使用IIS承载WCF服务
查看>>
在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端
查看>>
Android性能优化Google课程翻译一:Render----OverDraw实战
查看>>
用Camshift算法对指定目标进行跟踪
查看>>
Tiny4412 开发板 编译环境搭建【转】
查看>>
为你的网站加上SSL,可以使用HTTPS进行访问
查看>>
软件project--谈项目开发
查看>>
Android studio及eclipse中的junit单元測试
查看>>
几个英文网站
查看>>
在Android中创建文件
查看>>