按升序合并 2 个排序列表

有没有办法合并 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]


qq_花开花谢_0
浏览 155回答 2
2回答

大话西游666

您可以比较 of 的第一个元素list1和最后一个元素,list2也可以pop从list2with的末尾开始pop()(不带任何参数)。最后,你可以append在剩下的列表中list2,以result与pop()直至一个也不剩。因此,稍加修改,您的代码将变为:def merge2(list1, list2):&nbsp; &nbsp; results = []&nbsp; &nbsp; while list1 and list2:&nbsp; &nbsp; &nbsp; &nbsp; if list1[0] < list2[-1]:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; results.append(list1.pop(0))&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; results.append(list2.pop())&nbsp; &nbsp; results.extend(list1)&nbsp; &nbsp; while list2:&nbsp; &nbsp; &nbsp; &nbsp; results.append(list2.pop())&nbsp; &nbsp; return resultsprint(merge2([1,3,11,34], [60,38,7,1,0]))# [0, 1, 1, 3, 7, 11, 34, 38, 60]

回首忆惘然

你可以用for循环做基本上相同的事情。这意味着只有list2突变。def merge2(list1, list2):&nbsp; &nbsp; result = []&nbsp; &nbsp; for item in list1:&nbsp; &nbsp; &nbsp; &nbsp; while list2[-1] < item:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.append(list2.pop())&nbsp; &nbsp; &nbsp; &nbsp; result.append(item)&nbsp; &nbsp; while list2:&nbsp; &nbsp; &nbsp; &nbsp; result.append(list2.pop())&nbsp; &nbsp; return result请注意,这不使用len(这是一个内置函数)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python