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

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

f82b54784e0e44a78fd3ad10cac8a322.png

摄影:产品经理

厨师: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)

运行效果如下图所示:

836919634f3150843000658c08a025fa.png

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

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

首先对比 a[0]和 b[0],由于 a[0]更小,输出 a[0]。

再对比 a[1]和 b[0],发现 b[0]更小,输出 b[0]。

再对比 a[1]和 b[1],发现 a[1]更小,所以输出 a[1]。

……

整个过程用 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)

运行效果如下图所示:

73b38e6d5a056171edc92bdf613ac655.png

不过,你并不需要在工作中写出这样的代码,因为 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)

运行效果如下图所示:

c38b2ecb631f5906bb45faa1a92da812.png

文章来源: blog.51cto.com,作者:未闻Code,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.51cto.com/15023263/2559059

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值