2017-02-11 1 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 (it sh ould будет отсортирован), если итерабельность пуста.

Смежные вопросы