2017-07-31 54 views
0

我正在做這個練習,需要我連接2個已排序的列表,我不確定爲什麼輸出是這種方式。
另外,我已經習慣了C,所以我通常會寫很多「無用」的代碼,只要我可以用python方法完成它。你認爲如果我只是繼續解決問題,那麼對於我來說,以pythonic的方式思考就會很自然嗎?如果有更簡單的方法來解決這個問題,請告訴我。得到這個結果,我該如何解決6號? > [1,2,3,4,5,[6]]

我的代碼:

def conc_sorted(list1, list2): 
    result = [] 
    i = 0 
    while True: 
     if not list1:    # checking if both lists still have anything in it 
      result.append(list2) # to avoid 'out of range' 
      break 
     elif not list2: 
      result.append(list1) 
      break 
     else:   
      result.append(compare(list1, list2)) # calls compare() and appends whatever it pops  

    print result 

def compare(list1, list2): 
    if (list1[0] < list2[0]):  
     return list1.pop(0) 
    else: 
     return list2.pop(0) 
# exemple  
list1 = [1, 4, 6] 
list2 = [2, 3, 5] 
conc_sorted(list1, list2) 

輸出> [1,2,3,4,5,[6]]

+1

什麼是你想要的輸出?怎麼樣'list1.extend(list2).sort()' – albert

+0

你需要做這個很長的路還是僅僅因爲你的C背景?這裏有很簡單的Python方法,但也許爲了練習,這些方法是被禁止的。 –

+0

@albert差不多。 '.extend'在原地工作。將這兩行分開。 –

回答

2

你的鹼情況下,追加單個元素列表到你的結果。你需要改變.append.extend

if not list1:    
    result.extend(list2) 
    break 
elif not list2: 
    result.extend(list1) 
    break 
+0

爲什麼不連接和排序?因爲這是O(nlogn),但你可以在O(n)*中完成,如果列表已經排序*。考慮合併排序。這是合併部分。 –

+0

我不知道.extend和.sort 有關學習方法的好方法的任何提示?這不是我不知道如何使用它,而是我不知道它們存在。我習慣於不得不像C一樣手工編寫所有代碼。 – Tax

+0

@ juanpa.arrivillaga我沒有看到他們已經分類的部分。我的錯。 –

-1
sorted (list1 + list2) 

[1,2,3,4,5,6]

0

您應該使用擴展這裏操作,而不是追加因爲追加一次只帶單個輸入(實體)。 是的!我爲你的問題得到了一個更簡單的代碼。
x=[1,4,6]

y=[2,3,5]

z=x+y

z.sort()

print z