2017-08-11 103 views
-2

我一直在試圖代碼在Python合併排序程序:爲什麼我的合併排序程序給出錯誤?

def merge (list1 , list2) : 
    result = [] 
    while (len(list1) != 0 or len(list2) != 0) : 
     if (len(list1) == 1 and len(list2) == 0) : 
      result.append(list1[0]) 
      del list1[0] 
     elif (len(list1) == 0 and len(list2) == 1) : 
      result.append(list2[0]) 
      del list2[0] 
     else : 
      if (list1[0]<list2[0]) : 
       result.append(list1[0]) 
       del list1[0] 
      elif (list1[0]>list2[0]) : 
       result.append(list2[0]) 
       del list2[0] 

    return result 

但是當我執行此代碼

print merge([43, 60], [71, 84]) 

我得到的錯誤:

Traceback (most recent call last): 
    File "mergesort.py", line 99, in <module> 
    print merge([43, 60], [71, 84]) 
    File "mergesort.py", line 11, in merge 
    if (list1[0]<list2[0]) : 
IndexError: list index out of range 

爲什麼我明白了嗎?

+0

喜歡它說因爲列表索引超出範圍。此外,你的代碼正在運行,你打算問爲什麼你會得到一個錯誤。 –

+0

一個很好的調試技巧是在你的方法周圍添加大量的日誌,給出你懷疑問題出現的狀態。例如錯誤消息中提到的行之前。 –

回答

0

您已迭代,直到您有list1爲空,已將兩個元素均移至result。在這個問題點

else : 
     print "TRACE", list1, list2, result 
     if (list1[0]<list2[0]) : 
      result.append(list1[0]) 
      del list1[0] 

使用簡單的跟蹤,我們看到了迭代輸出

TRACE [43, 60] [71, 84] [] 
TRACE [60] [71, 84] [43] 
TRACE [] [71, 84] [43, 60] 
Traceback (most recent call last): 
    File "so.py", line 21, in <module> 
    print merge([43, 60], [71, 84]) 
    File "so.py", line 12, in merge 
    if (list1[0]<list2[0]) : 
IndexError: list index out of range 

現在你知道的根本原因,我相信你可以從這裏修理你的代碼。

0

問題出在list1。您繼續刪除第13行上的列表1中的項目del list1[0],並且當list1爲空時,則嘗試使用第11行上的list1[0]if (list1[0]<list2[0]) :)訪問它。列表中沒有任何東西,所以Python會拋出一個錯誤

indexError: list index out of range

相關問題