2017-02-11 52 views
-2
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]

回答

0

你需要保持最小的元素:

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

另一种意见:如果你希望他们合并你不需要sorted -calls(它sh应该已经排序)如果迭代是空的。