《Python Cookbook 3rd》笔记(4.7):迭代器切片
迭代器切片
问题
你想得到一个由迭代器生成的切片对象,但是标准切片操作并不能做到。
解法
函数 itertools.islice() 正好适用于在迭代器和生成器上做切片操作。比如:
>>> def count(n):
... while True:
... yield n
... n += 1
...
>>> c = count(0)
>>> c[10:20]
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'generator' object is not subscriptable>>> # Now using islice()
>>> import itertools
>>> for x in itertools.islice(c, 10, 20):
... print(x)
...
10
11
12
13
14
15
16
17
18
19
>>>
讨论
迭代器和生成器不能使用标准的切片操作,因为它们的长度事先我们并不知道 (并且也没有实现索引)。函数 islice() 返回一个可以生成指定元素的迭代器,它通过遍历并丢弃直到切片开始索引位置的所有元素。然后才开始一个个的返回元素,并直到切片结束索引位置。
这里要着重强调的一点是 islice() 会消耗掉传入的迭代器中的数据。必须考虑到迭代器是不可逆的这个事实。所以如果你需要之后再次访问这个迭代器的话,那你就得先将它里面的数据放入一个列表中。
《Python Cookbook 3rd》笔记(4.7):迭代器切片相关推荐
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
- Python Cookbook 3rd Edition Documentation
Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- 《Python cookbook》笔记二
<Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- 《Python Cookbook 3rd》笔记汇总
文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...
- 《Python cookbook》笔记一
<Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...
- 《Python Cookbook 3rd》笔记(4.4):实现迭代器协议
实现迭代器协议 问题 你想构建一个能支持迭代操作的自定义对象,并希望找到一个能实现迭代协议的简单方法. 解法 目前为止,在一个对象上实现迭代最简单的方式是使用一个生成器函数.在 4.2 小节中,使用 ...
最新文章
- Jittor框架API
- Ubuntu下安装QT5.4.1
- socket套接字选项
- 【推荐系统(一)】协同过滤之基于领域的方法(UserCF,ItemCF)
- nodejs unhandledPromiseRejectionWarning警告信息
- 纪事本 乱码_纪事日记–可自定义的数据存储
- 数据结构(JAVA)--图
- 第 2 讲 初识 SLAM
- Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx
- Python3-环境篇-01-Python3安装
- 计算机多媒体应用的技术手段,计算机多媒体技术的关键性技术
- 偶尔文艺-关于想要转录MIDI从YAMAHA到MAC
- 基站位置查询系统_如何查看附近信号基站的位置
- 云计算现在好就业吗?薪资怎么样?
- 批量将所有文件按照文件名中的扩展名后缀进行分类整理
- Lisp自动画梯形_CAD lisp 求助一段代码实现自动画弧!
- 你珍藏多年,不舍得分享的网站有哪些?
- 「Adobe国际认证」Adobe Photoshop,如何裁剪并拉直照片?
- unity屏幕适配以及坐标点适配
- C++字符串转换为数值型
热门文章
- 深入浅出VC++串口编程之基于Win32 API
- 写在S3C2440A平台+winCE5.0+NAND +HIVE注册表的实现
- java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
- java种子填充_种子填充实例运行出问题
- mapgis转arcgis数据后发现属性表内没有数据
- SharePoint 2010 WSP包部署过程中究竟发生什么?
- Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】
- etl构建数据仓库五步法_带你了解数据仓库的基本架构
- json qbytearray 串 转_JSON数据采集网关,json转Modbus RTU串IO口RS485转4~20mA边缘计算智能终端...
- 【LeetCode - 227】基本计算器 II(栈)