不同集合上元素的迭代

问题

你想在多个对象执行相同的操作,但是这些对象在不同的容器中,你希望代码在不失可读性的情况下避免写重复的循环。

解法

itertools.chain() 方法可以用来简化这个任务。它接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。为了演示清楚,考虑下面这个例子:

>>> from itertools import chain
>>> a = [1, 2, 3, 4]
>>> b = ['x', 'y', 'z']
>>> for x in chain(a, b):
... print(x)
...
1
2
3
4
x
y
z
>>>

使用 chain() 的一个常见场景是当你想对不同的集合中所有元素执行某些操作的时候。比如:

# Various working sets of items
active_items = set()
inactive_items = set()# Iterate over all items
for item in chain(active_items, inactive_items):# Process item

这种解决方案要比像下面这样使用两个单独的循环更加优雅,

for item in active_items:# Process item...for item in inactive_items:# Process item...

讨论

itertools.chain() 接受一个或多个可迭代对象最为输入参数。然后创建一个迭代器,依次连续的返回每个可迭代对象中的元素。这种方式要比先将序列合并再迭代要高效的多。比如:

# Inefficent
for x in a + b:...# Better
for x in chain(a, b):...

第一种方案中, a + b 操作会创建一个全新的序列并要求 a 和 b 的类型一致。chian() 不会有这一步,所以如果输入序列非常大的时候会很省内存。并且当可迭代对象类型不一样的时候 chain() 同样可以很好的工作。

《Python Cookbook 3rd》笔记(4.12):不同集合上元素的迭代相关推荐

  1. python 不同集合上元素的迭代 chain()

    itertools.chain()可以接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节 >>> from itertools import chai ...

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

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

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

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

  4. Python Cookbook 3rd Edition Documentation

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

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

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

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

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

  7. 《Python cookbook》笔记二

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

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

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

  9. 《Python Cookbook 3rd》笔记(5.21):序列化 Python 对象

    序列化 Python 对象 问题 你需要将一个 Python 对象序列化为一个字节流,以便将它保存到一个文件.存储到数据库或者通过网络传输它. 解法 对于序列化最普遍的做法就是使用 pickle 模块 ...

最新文章

  1. Maven项目配置EL表达式原样输出解决方法
  2. 设置USB无线网卡为监听模式大学霸IT达人
  3. 机器学习算法与Python实践之(四)支持向量机(SVM)实现
  4. mciSendString 多线程播放多首音乐 注意事项
  5. 计算机科学与技术综述文献,计算机科学与技术专业文献综述应该写些什么
  6. Linux中各种锁原理概述
  7. ZKTeco 中控考勤机M300 plus java开发步骤 使用jacob 调用中控考勤机dll(详细配置)
  8. u盘 固态硬盘 读写速度测试软件,超级U盘/SSD读写可靠性(扩容)测试工具urwtest v1.8...
  9. Wei Yang Bryan Lim, etc. Federated Learning in Mobile Edge Networks: A Comprehensive Survey.
  10. imap能和服务器同步文件夹吗,IMAP 同步
  11. 一些不错的酷站欣赏的网站
  12. nand flash地址机制
  13. 解决:SpringBoot中使用WebSocket传输数据,提示 1009|The decoded text message was too big for the output buffer and
  14. python的curses模块使用
  15. 常用html/css/js学习(会持续更新)
  16. 摸鱼系列之idea摸鱼插件推荐
  17. 爆笑!新一轮的淘宝差评
  18. C语言指针与指针变量
  19. 2020中南大学研究生招生夏令营机试题题解
  20. mysql批量插入没有返回主键id

热门文章

  1. 五大算法之三--贪心算法
  2. linux下 如何调试php,linux下使用gdb对php源码调试
  3. 软件oem要注意什么_做化妆品oem,选择化妆品包材要注意什么问题
  4. 【转】linx 设备名字来由 sd sr sg st
  5. 【转】C#实现SM3国密加密
  6. 【转】TcpListener和tcpclient使用
  7. 【转】理解SQL Server的安全对象和权限
  8. 一步步编写操作系统 2 部署工作环境 2
  9. 怎么抓取屏幕截图计算机考试时间,定时抓屏快照(电脑截屏工具)V4.8 最新版
  10. MQTT和HTTP的区别