顺序迭代合并后的排序迭代对象

问题

你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。

解法

heapq.merge() 函数可以帮你解决这个问题。比如:

>>> import heapq
>>> a = [1, 4, 7, 10]
>>> b = [2, 5, 6, 11]
>>> for c in heapq.merge(a, b):
...     print(c)
...
1
2
4
5
6
7
10
11

讨论

heapq.merge 可迭代特性意味着它不会立马读取所有序列。这就意味着你可以在非常长的序列中使用它,而不会有太大的开销。比如,下面是一个例子来演示如何合并两个排序文件:

with open('sorted_file_1', 'rt') as file1, \open('sorted_file_2', 'rt') as file2, \open('merged_file', 'wt') as outf:for line in heapq.merge(file1, file2):outf.write(line)

有一点要强调的是 heapq.merge() 需要所有输入序列必须是排过序的。特别的,它并不会预先读取所有数据到堆栈中或者预先排序,也不会对输入做任何的排序检测。它仅仅是检查所有序列的开始部分并返回最小的那个,这个过程一直会持续直到所有输入序列中的元素都被遍历完。

《Python Cookbook 3rd》笔记(4.15):顺序迭代合并后的排序迭代对象相关推荐

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

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

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

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

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

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

  4. Python Cookbook 3rd Edition Documentation

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

  5. 《Python cookbook》笔记二

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

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

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

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

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

  8. 《Python Cookbook 3rd》笔记(4.11):同时迭代多个序列

    同时迭代多个序列 问题 你想同时迭代多个序列,每次分别从一个序列中取一个元素. 解法 为了同时迭代多个序列,使用 zip() 函数.比如: >>> xpts = [1, 5, 4, ...

  9. 《Python Cookbook 3rd》笔记(4.10):序列上索引值迭代

    序列上索引值迭代 问题 你想在迭代一个序列的同时跟踪正在被处理的元素索引. 解法 内置的 enumerate() 函数可以很好的解决这个问题: >>> my_list = ['a', ...

最新文章

  1. 公差基本偏差代号_《公差配合与技术测量》试题答案卷
  2. Java 接口实现计算器加减乘除(字符交互界面)
  3. 面对非线性可分的情况怎么处理
  4. Reading——The Non-Designer's Design Book
  5. java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)
  6. linux添加phoenix引导,在linux怎么执行phoenix 脚本
  7. OUTLOOK2019 解决 无法验证您连接到的服务器使用的安全证书
  8. android flutter 环境,Android Studio 中创建Flutter环境配置(Mac环境)
  9. 机器人领域会议期刊特点
  10. aws beanstalk mysql_AWS Beanstalk搭建WordPress站点
  11. 关于“客户感知价值提升”的思考(三)---电商渠道客户感知管理方法探讨
  12. ImageView设置边框的两种方式
  13. std::thread
  14. Linux移植Windows摄像头驱动,Arm-Linux摄像头驱动程序的移植
  15. 第三方百度地图-----展示所在位置显示小圆点
  16. Dining (网络流)
  17. 进制转换 2进制转10进制 10进制转2进制
  18. Field baseMapper in com.xxx required a single bean,but 100 were found --------Mybatis-Plus
  19. 社群运营有哪六种裂变模型?
  20. js逆向-常见的加密算法

热门文章

  1. 三菱d700变频器接线图_图解PLC与变频器通讯接线
  2. greenfoot推箱子游戏_推箱子小游戏V2.0更新
  3. 电脑安装系统多少钱_电脑系统安装教学
  4. 【转】ABP源码分析三:ABP Module
  5. c#中常用集合类和集合接口之接口系列【转】
  6. SharePoint Desiger编辑模板时提示“服务器错误,拒绝访问”的解决之道
  7. SharePoint网站集备份与恢复
  8. java 服务降级_微服务的降级学习
  9. python代码实例sicket_Python socket聊天脚本代码实例
  10. Angular 下拉搜索框实现