迭代器切片

问题

你想得到一个由迭代器生成的切片对象,但是标准切片操作并不能做到。

解法

函数 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):迭代器切片相关推荐

  1. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  2. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  3. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  4. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  5. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  6. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  7. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  8. 《Python cookbook》笔记一

    <Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...

  9. 《Python Cookbook 3rd》笔记(4.4):实现迭代器协议

    实现迭代器协议 问题 你想构建一个能支持迭代操作的自定义对象,并希望找到一个能实现迭代协议的简单方法. 解法 目前为止,在一个对象上实现迭代最简单的方式是使用一个生成器函数.在 4.2 小节中,使用 ...

最新文章

  1. Jittor框架API
  2. Ubuntu下安装QT5.4.1
  3. socket套接字选项
  4. 【推荐系统(一)】协同过滤之基于领域的方法(UserCF,ItemCF)
  5. nodejs unhandledPromiseRejectionWarning警告信息
  6. 纪事本 乱码_纪事日记–可自定义的数据存储
  7. 数据结构(JAVA)--图
  8. 第 2 讲 初识 SLAM
  9. Atitit 图像处理之编程之类库调用的接口api cli gui ws rest  attilax大总结.docx
  10. Python3-环境篇-01-Python3安装
  11. 计算机多媒体应用的技术手段,计算机多媒体技术的关键性技术
  12. 偶尔文艺-关于想要转录MIDI从YAMAHA到MAC
  13. 基站位置查询系统_如何查看附近信号基站的位置
  14. 云计算现在好就业吗?薪资怎么样?
  15. 批量将所有文件按照文件名中的扩展名后缀进行分类整理
  16. Lisp自动画梯形_CAD lisp 求助一段代码实现自动画弧!
  17. 你珍藏多年,不舍得分享的网站有哪些?
  18. 「Adobe国际认证」Adobe Photoshop,如何裁剪并拉直照片?
  19. unity屏幕适配以及坐标点适配
  20. C++字符串转换为数值型

热门文章

  1. 深入浅出VC++串口编程之基于Win32 API
  2. 写在S3C2440A平台+winCE5.0+NAND +HIVE注册表的实现
  3. java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
  4. java种子填充_种子填充实例运行出问题
  5. mapgis转arcgis数据后发现属性表内没有数据
  6. SharePoint 2010 WSP包部署过程中究竟发生什么?
  7. Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】
  8. etl构建数据仓库五步法_带你了解数据仓库的基本架构
  9. json qbytearray 串 转_JSON数据采集网关,json转Modbus RTU串IO口RS485转4~20mA边缘计算智能终端...
  10. 【LeetCode - 227】基本计算器 II(栈)