2015-05-07 2 views
1

Я хочу отсортировать один список, поскольку я создаю его из 2 отсортированного списка рекурсивно. Это то, что я написал до сих пор:python recursively merge 2 list в отсортированном виде

def list_creation (list_one,list_two): 
    if list_one == [] and list_two == []: 
     return [] 
    else: 
     if list_one != [] and list_two != []: 
      if list_one[0] <= list_two[0]: 
       return [list_one[0],list_two[0]] + list_creation(list_one[1:],list_two[1:]) 
      else: 
       return [list_two[0],list_one[0]] + list_creation(list_one[1:],list_two[1:]) 

print(list_creation([10,11,12,13],[14,15,16,17])) 
print(list_creation([3,6,9,12],[4,8,12,16])) 

Это работает для второго оператора печати, но не для первого. Какие-либо предложения?

+0

Где эта функция 'merge' определена? – skyline75489

+0

Вы не можете предположить, что вы можете взять из обоих списков каждую итерацию. Вам нужно обработать случай, когда второй элемент в 'list_one' меньше, чем первый элемент в' list_two'. Способ сделать это - взять один элемент за раз, из списка с меньшей головой. – univerio

+0

Извините, что merge был опечаткой. – Cleanshot

ответ

1

Ваша логика неверна. Вы должны делать добавочный элемент по позиции, а не попарно. Например, рассмотрите [1,2] и [3,4]. Ваш алгоритм будет сочетать [1,3,2,4], что, очевидно, неверно. Основная идея состоит в том, чтобы сначала добавить 1 и вызвать рекурсивно алгоритм с остальными списками, то есть [2] и [3,4]. Конечно, вы также должны рассмотреть случай, когда один из списков пуст, а другой - нет.

+0

Большое вам спасибо! Не могу поверить, что раньше этого не видел !! – Cleanshot

+0

У меня недостаточно репутации, чтобы проголосовать =/ – Cleanshot

+0

Тебе очень рады. – Santiago

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