迭代器怎么就节省内存了?
时间:2022-07-26
本文章向大家介绍迭代器怎么就节省内存了?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
迭代器怎么节省内存了?
只知道使用迭代器能节省内存,但却不知道怎么使用才能节省内存。
下面就来回答这个问题。
首先创建一个list:
In [1]: a=[1,3,5,9,10]
其次,列表内每个元素+1,创建一个新列表
In [2]: a1 = [i+1 for i in a]
依次打印a1
中每个元素:
In [8]: for i in a1:
...: print(i)
上面操作等价于:
a1 = []
for i in a:
a1.append(i+1)
for i in a1:
print(i)
空间复杂度为 O(n),n为列表a内元素个数。
但是,使用迭代器实现上面的元素+1并打印的空间复杂度是多少呢?
ait = (i+1 for i in a) # 得到生成器,也是一种特殊的迭代器
for i in ait:
print(i)
上面操作等价于:
for i in a:
print(i+1)
不需要额外空间,所以使用迭代器加1并打印的空间复杂度为O(1).
结论:迭代器更加节省空间。
自定义迭代器案例
迭代器对象必须要实现两个方法__iter__
和__next__
,为了帮助大家理解,我们通过自定义一个迭代器加深对它的理解。
自定义一个迭代器,实现斐波那契数列:
#斐波那契数列
class Fabs():
def __init__(self,max):
self.max=max
self.n,self.a,self.b=0,0,1
#定义__iter__方法
def __iter__(self):
return self
#定义__next__方法
def __next__(self):
if self.n<self.max:
tmp=self.b
self.a,self.b=self.b,self.a+self.b
self.n+=1
return tmp
raise StopIteration
使用这个迭代器,打印斐波那契数列前10项:
In [13]: for item in Fabs(10):
...: print(item,end=' ')
1 1 2 3 5 8 13 21 34 55
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式~调停者模式(Mediator)
- Sequential Nim(CodeForces - 1382B)【博弈】
- Less Coin Tosses(Gym - 102346L)【打表+找规律】
- leetcode1558题解【贪心】
- 如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能
- Kafka监控必备——Kafka-Eagle 2.0.2正式发布
- 安防/教育/互联网直播视频组件EasyRTSPServer读取本地文件报错找不到EasyStreamClient.dll解决方法
- C语言编程入门之--第六章C语言控制语句
- RTSP网络摄像头网页无插件直播视频平台EasyNVR自定义标题和CopyRight步骤
- 设计模式~解释器
- RTSP/GB28181/HIKSDK/Ehome协议视频上云服务平台EasyCVR人脸识别开发ArcSoftFace环境搭建
- RTSP/GB28181/HIKSDK/EHome流媒体协议视频上云网关EasyCVR流地址密码不正确如何修正?
- tmux终端意外出现控制字符
- clickhouse编译安装以及搭建mysql实时复制
- Linux回收站机制实现过程及用法详解