Python 列表索引必须是整数或片,而不是非非类型

Python 列表索引必须是整数或片,而不是非非类型,python,Python,当我试图自己创建快速排序时,我正在处理这个问题 我不知道如何修复这个错误,我也不知道我的代码中是否存在其他问题 def Qsort(list): if len(list) < 2: return list Qsorthelper(list, 0, len(list)-1) def Qsorthelper(list, first, last): if last>first: split=partition(list, first

当我试图自己创建快速排序时,我正在处理这个问题 我不知道如何修复这个错误,我也不知道我的代码中是否存在其他问题

def Qsort(list):
    if len(list) < 2:
        return list
    Qsorthelper(list, 0, len(list)-1)

def Qsorthelper(list, first, last):
    if last>first:
        split=partition(list, first, last)
        Qsorthelper(list, first, split-1)
        Qsorthelper(list, split+1, last)

def median(list):
    if len(list) %2 == 0:
        return (len(list)//2+len(list)//2-1)/2
    else:
        return len(list)//2

def finditem(list, num):
    for i in range(0,len(list)-1):
        if num == list[i]:
            return i


def choosepivot(list):
    if list[0] > list[len(list)-1] > list[median(list)] or list[0] < 
    list[len(list)-1] < list[median(list)]:
        return list[len(list)-1]
    elif list[len(list)-1] > list[0] > list[median(list)] or 
    list[len(list)-1] < list[0] < list[median(list)]:
        return list[0]
    else:
        return list[median(list)]



def partition(list, first, last):
    pivot = choosepivot(list)
    list.append(pivot)
    list.remove(pivot)
    left = list[first]
    right = list[last-1]
    done = False

    while not done:
        while left <= right and list[left] <= pivot:
            left = left + 1

        while right >= left and list[right] >= pivot:
            right = right - 1

        if right < left:
            done = True
        else:
            temp = list[left]
            list[left] = list[right]
            list[right] = temp

    temp = list[finditem(list,pivot)]
    list[finditem(list,pivot)] = list[right]
    list[right] = temp

    return right

alist = [54,26,93,17,77,31,44,55,20]
Qsort(alist)
print(alist)
我得到了这个错误:

File "C:\Users\user\Desktop\ITB\failed quick sort.py", line 59, in partition
    alist[finditem(alist,pivot)] = alist[right]
IndexError: list index out of range
>>> 

temp = list[finditem(list,pivot)]
list[finditem(list,pivot)] = list[right]
list[right] = temp

此ipart是我使用轴切换最后一个项目以完成一个周期的部分,这里有些错误,但我想知道如何操作。

导致上述错误的代码在finditem函数中,该函数在最后一个元素之前停止。如果您试图查找的项恰好是最后一个元素,则不会返回None,并将其用作list的索引,您不应该将list用作变量名,因为它在python中有另一种含义

但这不是唯一的问题。中值函数也可以返回浮点值,因此任何使用它进行索引的操作(如列表[medianlist])都可能会在大小相同的列表中失败


还有其他错误。我建议单独测试每个功能,也许可以查看一些现有的实现以获得指导。

请将错误消息添加到您的问题中可能重复的well。。。要调试的代码行太多。也许你可以把它隔离一点?另外:此外,错误必须指示返回错误的代码行。为了提供帮助,我会在每次操作后打印列表,看看它是否返回了预期的结果。然后你可以更精确地知道哪里出了问题。提示:在每次打印中添加一个数字以简化任务,如打印步骤1所示,列出您的代码有几个错误。如果您在编写的每一步之后都测试代码,那会更好。
File "C:\Users\user\Desktop\ITB\failed quick sort.py", line 59, in partition
    alist[finditem(alist,pivot)] = alist[right]
IndexError: list index out of range
>>> 

temp = list[finditem(list,pivot)]
list[finditem(list,pivot)] = list[right]
list[right] = temp