python:生成器进阶
2024-09-28 02:16:26
1,列表推导式
值 for 循环
2,生成器表达式
g=(i for i in range(10))
print(g)
for i in g:
print(i)
3,列表推导式与生成器表达式的区别
#括号不一样
#返回值不一样 ===》生成器表达式几乎不占内存
g =('鸡蛋%s'%i for i in range(10))
print(g)
for i in g:
print(i)
4,各种推导式
1)列表推导式:
[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理
#例:找到嵌套列表中名字含有两个‘e’的所有名字 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] print([name for lst in names for name in lst if name.count('e') >= 2]) # 注意遍历顺序,这是实现的关键
2)列表推导式(筛选功能):
[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能
3)生成器推导式:
(满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件)
4)字典推导式:
例一:将一个字典的key和value对调
mcase = {'a': 10, 'b': 34} mcase_frequency = {mcase[k]: k for k in mcase} print(mcase_frequency)
例二:合并大小写对应的value值,将k统一成小写
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()} print(mcase_frequency)
5)集合推导式:
squared = {x**2 for x in [1, -1, 2]} print(squared) # Output: set([1, 4])
5,移动平均值
def averager(): total = 0.0 count = 0 average = None while True: term = yield average total += term count += 1 average = total/count g_avg = averager() next(g_avg) print(g_avg.send(10)) print(g_avg.send(30)) print(g_avg.send(5))
6,预激生成器的装饰器
def init(func): #在调用被装饰生成器函数的时候首先用next激活生成器 def inner(*args,**kwargs): g = func(*args,**kwargs) next(g) return g return inner @init def averager(): total = 0.0 count = 0 average = None while True: term = yield average total += term count += 1 average = total/count g_avg = averager() # next(g_avg) 在装饰器中执行了next方法 print(g_avg.send(10)) print(g_avg.send(30)) print(g_avg.send(5))
最新文章
- [OC][地图] 高德地图之定位初探(一)
- C# WebBrowser 网页缩放的方法
- Aspect Oriented Programming
- http session 基础知识
- 编写高质量JavaScript代码的基本要点
- Hash中的一些概率计算
- SU Demos-02Filtering-04Sugabor
- (转)《深入理解java虚拟机》学习笔记8——Tomcat类加载器体系结构
- 使用linq语句获取指定条数的记录
- Linux——搭建PHP开发环境第一步:apache
- C语言总结2
- JaveScript运算符(JS知识点归纳三)
- 痞子衡嵌入式:一表全搜罗常见移动通信标准(1-5G, GSM/GPRS/CDMA/LTE/NR...)
- DOM事件类
- 第35节:Java面向对象中的多线程
- php trait使用
- github 快速部署
- 【HTTPS】自签CA证书 &;&; nginx配置https服务
- P3833 [SHOI2012]魔法树
- 卡片游戏(hdu4550)贪心