2017-08-11 29 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行目のlist1から項目を削除し続けます。del list1[0]list1が空の場合は、list1[0](11行目:if (list1[0]<list2[0]) :)でアクセスしようとします。リストには何もないので、Pythonはあなたに

indexError: list index out of range

関連する問題