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