python实现把两个排好序的列表合并成一个排好序的列表

本文介绍了一种将多个已排序的列表合并为一个有序列表的方法。通过两种不同的实现方式:一种是直接迭代合并,另一种是利用reduce函数进行多次合并,最终得到完全排序后的列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:方法1
#将两个排好序的列表合并成一个排好序的列表
def merge_list(a,b):
    if not a:
        return b
    if not b:
        return a
    a_index = b_index = 0
    ret = list()
    while a_index < len(a) and b_index < len(b):
        if a[a_index] <= b[b_index]:
            ret.append(a[a_index])
            a_index += 1
        else:
            ret.append(b[b_index])
            b_index += 1
    if a_index < len(a):
        ret.extend(a[a_index:])
    if b_index < len(b):
        ret.extend(b[b_index:])
    return ret
if __name__ == "__main__":

    #组合小文件
    lt1 = [1,8,12,13]
    lt2 = [5,8,17,28]
    lt3 = [1,90,98,99,100]
    res = merge_list(lt1,lt2)
    res1 = merge_list(res,lt3)
    print(res)
    print(res1)

#########################################结果

[1, 5, 8, 8, 12, 13, 17, 28]
[1, 1, 5, 8, 8, 12, 13, 17, 28, 90, 98, 99, 100]

 

如果是多个待排序的列表,采用方法二较好,借助reduce()函数

二:方法2

from functools import reduce
lts = list()
lts.append(lt1)
lts.append(lt2)
lts.append(lt3)
res2 = reduce(merge_list,lts)
print(res2)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值