我在这里找不到我的错误,如果有人可以帮助我会很棒。
def heapsort (lista) :
n= len(lista)-1
k= n/2
while (k>0) :
downheap(lista,n,k)
k-=1
while (n>=0) :
(lista[1]),(lista[n])=(lista[n]),(lista[1])
n-=1
return downheap(lista, n, 1)
return lista
def downheap (lista, n, k) :
v= lista[k]
while (k<=(n/2)) :
j=k+k
if (j<n and (lista[j]) == (lista[j])) :
break
(lista[k]) = (lista[j])
k = j
lista[k] = v
错误:
>>> heapsort([4,2,3,1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in heapsort
File "<stdin>", line 2, in downheap
TypeError: list indices must be integers, not float
答案 0 :(得分:5)
在Python 3中,使用/
除法运算符始终返回float
值:
>>> 2/2
1.0
>>> 3/2
1.5
使用楼层划分代替//
运算符:
k = n // 2
//
运算符始终返回一个整数,对结果进行处理:
>>> 2//2
1
>>> 3//2
1
也许您从Python 2中的示例编写了函数;在Python 2中,/
运算符是一个模糊的运算符;当两个操作数都是整数时,它就像地板除法运算符一样,但如果任一操作数是一个浮点数,那么它突然表现不同并返回浮点除法结果而不是。因为代码中的两个操作数都是整数,所以在Python 2中你的代码不会抛出那个异常。
您的下一个问题是downheap()
没有返回任何内容,因此当您在return downheap(lista, n, 1)
中使用heapsort()
时,您将返回None
。我怀疑return
有错误。
答案 1 :(得分:0)
将刚刚转换为int
时def heapsort (lista) :
n= len(lista)-1
k= int(n/2) // instead of k= n/2
while (k>0) :
downheap(lista,n,k)
k-=1
while (n>=0) :
(lista[1]),(lista[n])=(lista[n]),(lista[1])
n-=1
return downheap(lista, n, 1)
return lista