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

f5ccc6fda264e8b930104ba61b08d615.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)

运行效果如下图所示:

280c03d6866a86d279405c5ca3bf6cb5.png

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

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

  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)

运行效果如下图所示:

08827a1f8e028a35a2bf2a594287f763.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)

运行效果如下图所示:

29e079f2026f7d14a59da2f5453b1483.png

e1c5798af0563b18097eda3b7d9d3934.gif

未闻Code

PYTHON干货日更

长按扫码关注

9233e0084654d2d94308f49339ac8f44.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值