0
ソートされるリストに512個以上の要素がある場合に失敗するマージソートの実装でPythonで作業しています。リストのインデックスが512個を超えるマージソートのときにエラーが発生する
関連するコードは、以下である:
def mergeSort(oldList):
if len(oldList) > 1:
list1 = mergeSort(oldList[:len(oldList)/2])
list2 = mergeSort(oldList[len(oldList)/2:])
newList = merge(list1, list2)
return newList
else:
return oldList
def merge(list1, list2):
newList = []
i = 0
j = 0
while(len(list1) > i or len(list2) > j):
print i, j
if len(list1) is i:
newList.append(list2[j])
j = j + 1
elif len(list2) is j:
newList.append(list1[i])
i = i + 1
elif list1[i] > list2[j]:
newList.append(list2[j])
j = j + 1
else:
newList.append(list1[i])
i = i + 1
return newList
unsortedList = [ randint(0,100) for i in range(513) ]
mergeSortedList = mergeSort(unsortedList)
私は小さい整数の最後の行の次に513を変更すると予想されるように、コードが動作します。 513で始まる、私は次のエラーを取得する:
File "./sortcomparison.py", line 129, in merge
elif list1[i] > list2[j]:
IndexError: list index out of range
上
より多くの私は(リスト1)lenの場合 '変更することでこの問題を解決することができた私です:'と 'のelif LEN(LIST2)がjである:' lenの場合は '(リスト1)== i: 'と' elif len(list2)== j: 'となります。誰かがその2つの違いを説明でき、なぜそれが元のコードと壊れたコードになったのでしょうか? – mdf730
Pythonでは 'is'は両方の変数が同じオブジェクトを指しているかどうかをチェックしますが、' == '記号は2つの変数の値が同じかどうかをチェックします。 – GeekSambhu