Python 中的合并排序函数返回错误
Error returned from a Merge Sort function in Python
我已经尝试编写一个合并排序函数,如下所示。但是当我尝试测试它时,我收到一个错误:
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)
事实上 self
是这些方法的参数之一,这意味着它们很可能是 class 的一部分(您在 post 中省略了一个) .
如果正确,您需要使用 self.mergesort(l)
调用,其中 l
是一个列表。
作为针对您将发现的下一个错误的 pre-emptive 措施,出于类似原因,您需要将 return merge(a, b)
替换为 return self.merge(a, b)
。
最后,我不得不问 为什么 您将所有这些函数定义为 class 的方法。他们似乎不依赖任何共享数据。您是否确信在模块范围内声明它们不会更合适?
我已经尝试编写一个合并排序函数,如下所示。但是当我尝试测试它时,我收到一个错误:
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)
事实上 self
是这些方法的参数之一,这意味着它们很可能是 class 的一部分(您在 post 中省略了一个) .
如果正确,您需要使用 self.mergesort(l)
调用,其中 l
是一个列表。
作为针对您将发现的下一个错误的 pre-emptive 措施,出于类似原因,您需要将 return merge(a, b)
替换为 return self.merge(a, b)
。
最后,我不得不问 为什么 您将所有这些函数定义为 class 的方法。他们似乎不依赖任何共享数据。您是否确信在模块范围内声明它们不会更合适?