在合并排序中列出错误选项的索引

时间:2014-01-16 04:41:58

标签: list python-3.x indexing mergesort

我正在尝试使用简单的合并函数并省略函数中的排序顺序。问题在这里我得到列表索引超出范围错误20行,elif (lowList[0] >= highList[0])

我正在检查,如果此行之前的if语句中的任何列表为空,那么如果它们为空则不应该执行。但是,我认为Python检查了这一点。有没有解决方法可以解决这个问题。

def merge(my_l, low, high):

    middle = int((low + high) / 2)
    print(middle)
    lowList = my_l[low : middle]
    highList = my_l[middle + 1 : high]

    my_indx = low
    fullList = []

    while (lowList is not [] or  highList is not []):

        if lowList is []:
            fullList.append(highList.pop(0))

        elif highList is []:
            fullList.append(lowList.pop(0))

        elif (lowList[0] >= highList[0]):
            fullList.append(lowList.pop(0))
        else:
            fullList.append(highList.pop(0))

    return fullList

san = [2, 3, 4, 5, 6, 7]

san = merge(san, 0, len(san) - 1)
print (len(san - 1))

for i in san:
    print(i)

感谢您的帮助。

此致 小号

1 个答案:

答案 0 :(得分:1)

is关键字检查identity,而不是相等。

==中的elif更改为while循环中的'!=',并且不应出现此错误。

要查看此操作,请考虑以下代码:

a = []
b = []

print id(a)
print id(b)
print a is b
print a == b

输出

33444128
33415256
False
True