将两个列表合并为一个非降序

时间:2017-02-11 05:24:23

标签: python recursion

def merge (l1,l2):

    if l2 == [] and l2 == []:
        return [] 
    if l1 == []:
        return sorted(l2)
    if l2 == [] :
        return sorted(l1)

    if l1[0]<= l2[0]:
        return merge(l1[1:],l2)
    else:
        return merge(l1,l2[1:])

我正在编写一个名为merge的递归函数;它传递两个列表参数(每个都保证包含相同类型的值,每个都按非降序排序)它返回一个新列表,其中包含来自两个参数列表的所有值,以非降序排列。

致电merge([0,1,2,3,4],[5,6,7,8,9])会返回[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

但我的函数返回[5, 6, 7, 8, 9]

1 个答案:

答案 0 :(得分:0)

您需要保持最小元素:

if l1[0]<= l2[0]:
    return [l1[0]] + merge(l1[1:],l2)
else:
    return [l2[0]] + merge(l1,l2[1:])

另一条评论:如果你想要它们合并,你就不需要sorted - 调用(如果一个iterable为空,它就应该被排序)。