如何修复'IndexError:列表索引超出范围'错误

时间:2018-09-29 17:28:30

标签: python python-3.x partitioning mergesort

我是一个初学者,学习了python和入门算法,并试图实现所学知识。我正在尝试以下代码,但它反复给我“ IndexError:列表索引超出范围”。它在分区功能时失败,特别是在array [0],array [pivot] = array [pivot],array [0]代码处失败。我无法修复它。任何帮助表示赞赏。

$_POST['adultInput0']

1 个答案:

答案 0 :(得分:0)

如何解决“索引超出范围”错误?调试。精彩读物:How to debug small programs (#1)。使用打印语句或更好的调试器可以在代码中的某些位置停止并检查出了什么问题。我为此使用Visual Studio。

红点是断点-每当代码碰到红点时,它就会停止执行,我可以检查所有内容。然后,我可以逐行前进。黄色箭头显示我所在的行。

VS可以将变量固定为源代码的覆盖物-请查看图像右侧的小块。

调试工具列表:https://wiki.python.org/moin/PythonDebuggingTools


当程序第三次通过VS到达def partition(array,pivot):时,它超出范围:

value instead of index

原因是您的pivot包含value而不是交换它们需要的索引。

即使将其修复为:

def partition(array,pivot):        # partition
    idx = array.index(pivot) # get the index of the value here
    array[0],array[idx]=array[idx],array[0]   #swap
    j=1                  # intiatalize 

    for i in range(1,len(array)): 
        if array[i]<array[0]:
            array[i],array[j-1]=array[j-1],array[i]   #Swap the number less than the pivot
            j+=1

    array[1],array[j]=array[j],array[1]   #swap the pivot to its rightful place
    return j-1,array     #return index of pivot and the partitioned array

由于array[1],array[j]=array[j],array[1]太大,交换j时遇到另一个错误:

j too big

您需要修复算法。

HTH