2017-02-11 49 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應該已經排序)如果迭代是空的。