以升序合并2个排序的列表

时间:2018-11-14 03:37:35

标签: python computer-science

有没有一种方法可以合并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 个答案:

答案 0 :(得分:0)

您可以比较list1的第一个元素和list2的最后一个元素,并且可以将pop的结尾的list2pop()(不任何参数)。最后,您可以将appendlist2中的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]

答案 1 :(得分:0)

您可以使用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(这是一个内置函数)