获取错误无法解决的类型:int()> = list()

时间:2016-09-06 16:39:10

标签: python

我是python的新手。我正在尝试编写mergesort的python代码,我无法找到错误。

import math
t = int(input())

def merge(lf,rf):
    p=0
    q= 0    
    b=[]
    for i in range(len(rf)+len(lf)):    
        if (p>=len(lf)):
            b.append(rf[q:])
            break
        elif (q>=len(rf)):
            b.append(lf[p:])
            break
        elif (lf[p]>=rf[q]):
            b.append(rf[q])
            q=q+1
        else:
            b.append(lf[p])
            p=p+1
    return b


def sort(a):
    if (len(a)>1):
        mid = int(len(a)/2)
        lf=a[:mid]
        rf=a[mid:]
        lf=sort(lf) 
        rf=sort(rf)
        a=merge(lf,rf)
        print (a)
    return a

for i in range(t):
    n = int(input())
    a = [0]*n
    for j in range(n):
        a[j]=int(input())
    sort(a)
    print(a)

2 个答案:

答案 0 :(得分:2)

这一行

b.append(rf[q:])

将列表rf[q:]附加到b作为单个项目。但这并不是你真正想要的,因为b最终会包含数字的子列表以及它应该包含的数字。因此,您需要将rf[q:]内容添加到b,然后您可以使用

执行此操作
b.extend(rf[q:])

类似的评论适用于

b.append(lf[p:])

出现错误消息是因为您的代码尝试将lfrf列表中的数字与您意外添加的子列表进行比较。

另外,正如莱昂在评论中提到的那样,你需要做

a = sort(a)

在您脚本的倒数第二行,因为您的sort函数无法修改您传递的a

顺便说一下,您无需在此脚本中导入数学模块:您不能调用其任何函数或使用它定义的任何常量。

答案 1 :(得分:1)

当您执行b.append(rf[q:])b.append(lf[p:])时,您将列表作为元素添加到列表b中,看起来它应该是一个列表整数。