一日一技:在 Python 里面如何合并多个有序列表并使得结果依然有序?

简介: 一日一技:在 Python 里面如何合并多个有序列表并使得结果依然有序?

摄影:产品经理厨师:kingname

已知两个列表:[1,3,6,7,9][2,4,5,8,10]如何合并两个列表,并得到最终结果 [1,2,3,4,5,6,7,8,9,10]

最常想到的办法是先把两个列表加到一起,再排序:

a = [1, 3, 6, 7, 9]
b = [2, 4, 5, 8, 10]
c = a + b
c.sort()
print(c)

运行效果如下图所示:

但这样一来,你就浪费了这两个列表原本有序这个前置条件。

由于这两个列表有序,所以正确的处理算法应该是这样的:

  1. 首先对比 a[0]b[0],由于 a[0]更小,输出 a[0]
  2. 再对比 a[1]b[0],发现 b[0]更小,输出 b[0]
  3. 再对比 a[1]b[1],发现 a[1]更小,所以输出 a[1]
  4. ……

整个过程用 Python 来描述,代码如下:

def merge(a, b):
    if not a or not b:
        yield from (a + b)
        return
    if a[0] <= b[0]:
        yield a[0]
        yield from merge(a[1:], b)
    else:
        yield b[0]
        yield from merge(a, b[1:])
list_a = [1, 3, 6, 7, 9]
list_b = [2, 4, 5, 8, 10]
result = list(merge(list_a, list_b))
print(result)

运行效果如下图所示:

不过,你并不需要在工作中写出这样的代码,因为 Python 已经为你提供了现成的模块:heapq.merge。使用方法如下:

import heapq
list_a = [1, 3, 6, 7, 9]
list_b = [2, 4, 5, 8, 10]
result = list(heapq.merge(list_a, list_b))
print(result)

运行效果如下图所示:

目录
相关文章
|
8月前
|
索引 Python
如何使用Python的Pandas库进行数据合并和拼接?
Pandas的`merge()`函数用于数据合并,如示例所示,根据&#39;key&#39;列对两个DataFrame执行内连接。`concat()`函数用于数据拼接,沿轴0(行)拼接两个DataFrame,并忽略原索引。
126 2
|
8月前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
179 1
|
5月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
51 2
|
6月前
|
数据采集 机器学习/深度学习 数据挖掘
从混乱到有序,Python数据清洗术,让你的数据分析之路畅通无阻!
【7月更文挑战第20天】数据清洗在数据分析中至关重要,它确保数据质量,影响分析准确性和效率。Python的Pandas库是数据预处理的得力工具。基本步骤包括:导入数据(如`pd.read_csv()`)、检查概况(`head()`, `info()`, `describe()`)、处理缺失值(`fillna()`或`dropna()`)、转换数据类型(`pd.to_numeric()`)、去除重复项(`drop_duplicates()`)、排序和筛选数据,以及对分类变量编码(如使用`LabelEncoder`)。
101 3
|
6月前
|
搜索推荐 算法 大数据
Python排序大法揭秘!归并排序:如何优雅地合并两个世界?
【7月更文挑战第11天】归并排序是Python中一种高效优雅的排序算法,基于分而治之的思想,将数组拆分成小部分,分别排序后再合并。Python实现归并排序的关键在于递归地分割和有序合并数组。其稳定性和O(n log n)的时间复杂度使其在大数据处理中表现出色。通过学习归并排序,我们可以深化对编程思维的理解并提升解决问题的能力。
65 1
|
7月前
|
Python
Python中 合并字典
【6月更文挑战第15天】
42 4
无缝融合:使用 Python 和 PyFFmpeg 合并视频的完整指南
使用Python和PyFFmpeg合并视频教程:安装pyffmpeg和subprocess模块,编写merge_videos函数,通过ffmpeg命令行工具进行视频拼接。运行脚本将多个.mp4文件合并为一个,并保存为merged_video.mp4。简单易用,提升内容创作效率。
|
7月前
|
算法 安全 Java
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
44 1
|
6月前
|
Python
告别混乱!Python上下文管理器的自定义实践,让你的代码更加整洁有序
【7月更文挑战第6天】Python的上下文管理器通过`__enter__`和`__exit__`方法自动处理资源的获取与释放,如文件操作。使用with语句结合自定义类(如`FileManager`示例),能确保文件在使用后正确关闭,防止资源泄漏,提升代码整洁度和健壮性。自定义上下文管理器是代码模块化和错误处理的好实践。
40 0
下一篇
开通oss服务