为了账号安全,请及时绑定邮箱和手机立即绑定

按升序合并 2 个排序列表

按升序合并 2 个排序列表

qq_花开花谢_0 2021-08-17 15:39:02
有没有办法合并 2 个排序列表,其中 list1 按升序排列,list2 按降序排列,但新合并的列表应按升序排列。我希望在不使用任何内置函数或递归的情况下做到这一点。我有以下内容,但只有当 list2 也是按升序排列时才有效。def merge2(list1, list2):    results = []    while len(list1) and len(list2):        if list1[0] < list2[0]:            results.append(list1.pop(0))        else:            results.append(list2.pop(0))    results.extend(list1)    results.extend(list2)    return results该函数应产生以下内容:merge2([1,3,11,34],[60,38,7,1,0]) => [0,1,1,3,7,11,34,38,60]
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

您可以比较 of 的第一个元素list1和最后一个元素,list2也可以pop从list2with的末尾开始pop()(不带任何参数)。最后,你可以append在剩下的列表中list2,以result与pop()直至一个也不剩。


因此,稍加修改,您的代码将变为:


def merge2(list1, list2):

    results = []

    while list1 and list2:

        if list1[0] < list2[-1]:

            results.append(list1.pop(0))

        else:

            results.append(list2.pop())

    results.extend(list1)

    while list2:

        results.append(list2.pop())

    return results


print(merge2([1,3,11,34], [60,38,7,1,0]))

# [0, 1, 1, 3, 7, 11, 34, 38, 60]


查看完整回答
反对 回复 2021-08-17
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

你可以用for循环做基本上相同的事情。这意味着只有list2突变。


def merge2(list1, list2):

    result = []

    for item in list1:

        while list2[-1] < item:

            result.append(list2.pop())

        result.append(item)

    while list2:

        result.append(list2.pop())

    return result

请注意,这不使用len(这是一个内置函数)


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号