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

2024-09-25 08:39:44 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以合并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]

Tags: 方法函数列表len排序popresults内置
2条回答

您可以比较list1的第一个元素和list2的最后一个元素,并且可以从list2的末尾poppop()进行比较(不带任何参数)。最后,您可以使用pop()list2result中的剩余列表append到没有剩余列表为止。你知道吗

所以只要稍加修改,您的代码就会变成:

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]

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

相关问题 更多 >