从Python中的合并排序函数返回错误

时间:2017-01-17 18:05:25

标签: python mergesort

我尝试编写合并排序功能,如下所示。但是当我尝试测试它时,我收到一个错误:

the name mergesort is not defined

有人能指出导致此错误的原因吗?

    def merge(self,a,b):

    sorted_list=[]

    while len(a)!=0 and len(b)!=0:

        if a[0].get_type()<b[0].get_type():
            sorted_list.append(a[0])
            a.remove(a[0])
        else:
            sorted_list.append(b[0])
            b.remove(b[0])
    if len(a)==0:
        sorted_list+=b
    else:
        sorted_list+=a

    return sorted_list

def mergesort(self,lis):

    if len(lis) == 0 or len(lis) == 1:
        return lis
    else:
        middle = len(lis)// 2
        a = mergesort(lis[middle:]) #in pycharm the next 3 lines are with red underlined
        b = mergesort(lis[middle:])
        return merge(a,b)

1 个答案:

答案 0 :(得分:0)

self是这些方法的参数之一,这意味着它们很可能是一个类的一部分(你在帖子中省略了一个)。

如果这是正确的,您需要使用self.mergesort(l)进行调用,其中l是一个列表。

作为针对您将发现的下一个错误的先发制人措施,您需要将return merge(a, b)替换为return self.merge(a, b),原因类似。

最后,我不得不问为什么你将所有这些函数定义为类的方法。他们似乎不依赖任何共享数据。您是否确信在模块范围内不会更恰当地声明它们?