仅当合并排序超过512个数字时,列表索引超出范围时出错

时间:2017-08-14 03:13:20

标签: python sorting mergesort

我在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开始,我收到以下错误:

  

文件“./sortcomparison.py”,第129行,合并

elif list1[i] > list2[j]:
     

IndexError:列表索引超出范围

1 个答案:

答案 0 :(得分:0)

要查看代码失败的位置,您可以在合并函数中的try except块周围添加if else块。

要解决错误,请在is功能中将==替换为merge

is用于比较两个变量是否引用同一个对象,==用于检查相等性。

有关此here

的更多信息