2014-04-27 20 views
0

我正在寫一個函數合併(L1,L2)需要兩個列表輸入併合並它們。但是,當我運行它時,出現錯誤:TypeError:不支持的操作數類型爲+:'NoneType'和'str'有人可以幫助我嗎?合併兩個列表錯誤

def merge(L1,L2): 
    T = [] 
    subscript = 0 
    while len(L1) > 0 and len(L2) > 0: 
     if L1[subscript] < L2[subscript]: 
     T.append(str(L1[subscript])) + "," + str(L2[subscript]) 
     elif L1[subscript] == L2[subscript]: 
     del L2[subscript] 
     T.append(L1[subscript]) 
     elif L1[subscript] > L2[subscript]: 
     T.append(str(L2[subscript])) + "," + str(L1[subscript]) 
     subscript += 1 
    return T 

# print merge([0,2,4,6,8] , [1,3,5,7]) should return [0,1,2,3,4,5,6,7,8] 
# I`m assuming that the input lists are sorted. 
+1

爲什麼不添加和__then__排序 – sshashank124

+0

想一下錯誤的含義。然後可能會打印出你在'+' – keyser

+0

之間的值,看看'T.append'中的那些元素。 – Daniel

回答

0

這是一個正確的合併(雖然不是最好的方式其實就是寫它,它的做法相符):

def merge(L1, L2): 
    T = [] 
    subscript1 = 0 
    subscript2 = 0 
    while len(L1) > subscript1 and len(L2) > subscript2: 
     if L1[subscript1] < L2[subscript2]: 
      T.append(L1[subscript1]) 
      subscript1 += 1 
     elif L1[subscript1] == L2[subscript2]: 
      T.append(L1[subscript1]) 
      subscript1 += 1 
      subscript2 += 1 
     elif L1[subscript1] > L2[subscript2]: 
      T.append(L2[subscript2]) 
      subscript2 += 1 
    T.extend(L1[subscript1:]) 
    T.extend(L2[subscript2:]) 
    return T 

不要直接加逗號T;它們僅在顯示T時使用。相反,您只需將L1L2中兩個當前元素中較小的一個添加到T即可。如果兩者尺寸相同,則只添加一次。每次添加L1L2(或兩者)中的元素時,都會增加相應的下標。一旦你耗盡了一個清單,你只需將其他項目從另一個添加到T的末尾。 (請注意,您不必檢查哪個列表已完成;將空列表擴展爲T是無操作。)