1. 手动遍历迭代器

你想遍历一个可迭代对象中的所有元素,但是却不想使用for循环。

>>> items = [1, 2, 3]
>>> # Get the iterator
>>> it = iter(items) # Invokes items.__iter__()
>>> # Run the iterator
>>> next(it) # Invokes it.__next__()
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>

2. 代理迭代

3.使用生成器创建新的迭代模式

一个函数中需要有一个 yield 语句即可将其转换为一个生成器。 跟普通函数不同的是,生成器只能用于迭代操作

>>> def countdown(n):
... print('Starting to count from', n)
... while n > 0:
... yield n
... n -= 1
... print('Done!')
... >>> # Create the generator, notice no output appears
>>> c = countdown(3)
>>> c
<generator object countdown at 0x1006a0af0> >>> # Run to first yield and emit a value
>>> next(c)
Starting to count from 3
3 >>> # Run to the next yield
>>> next(c)
2 >>> # Run to next yield
>>> next(c)
1 >>> # Run to next yield (iteration stops)
>>> next(c)
Done!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>

4. 实现迭代器协议

5. 反向迭代

6.带有外部状态的生成器函数

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

8. 跳过可迭代对象的开始部分

场景:你想遍历一个可迭代对象,但是它开始的某些元素你并不感兴趣,想跳过它们。

>>> from itertools import dropwhile
>>> with open('/etc/passwd') as f:
... for line in dropwhile(lambda line: line.startswith('#'), f):
... print(line, end='')
...

如果你已经明确知道了要跳过的元素的个数的话,那么可以使用 itertools.islice() 来代替。

 

最新文章

  1. monkey之monkey日志分析
  2. 树(一)&mdash;&mdash;线段树
  3. 单元测试_JUnit4的应用与实践
  4. Heavily reliance on forensic tools is risky
  5. WM_SYSCOMMAND包括很多功能,比如:拖动左边框、拖动标题栏、滚动条滚动、点击最小化、双击标题栏——Delphi 通过事件代替了大部分常用的消息,所以Delphi 简单、易用、高效
  6. 学习笔记: JavaScript/JQuery 的cookie操作
  7. 简单的sql调优(批处理)
  8. 【if...else】身高预测
  9. 原生CSS动画回调事件
  10. 贪心算法----区间覆盖问题(POJ2376)
  11. Java 学习笔记 使用synchronized实现生产者消费者模式
  12. 饮冰三年-人工智能-linux-06 系统启动流程及安全
  13. 制作根文件系统之内核如何启动init进程
  14. 【Web】网页清除浮动的方法
  15. tp5内置验证规则
  16. JAVA规则引擎JSR-94笔札
  17. gulp安装搭建前端项目自动化
  18. 洛咕 P2468 [SDOI2010]粟粟的书架
  19. ySQL性能优化的21个最佳实践 和 mysql使用索引
  20. 老毛桃pe装机工具一键还原系统

热门文章

  1. Java设计模式学习记录-代理模式
  2. df说磁盘空间满了, du说没有,到底谁是对的
  3. laravel的seeder数据填充
  4. 用ASP.NET实现下载远程图片保存到本地的方法 保存抓取远程图片的方法
  5. C# 四舍五入 保留两位小数(转载)
  6. js 实现 Base64 编码的相互转换
  7. Java - HashMap 多线程安全解析
  8. js-jQuery性能优化(二)
  9. h5向上翻页图标晃动动画,css固定h5向上翻页图标在页面上
  10. TensorFlow Saver 保存最佳模型 tf.train.Saver Save Best Model