我正在尝试使用python 3.7实现合并排序。为此,我编写了一个merge()函数和一个递归sort()函数。在这里,sort()函数分解一个列表,直到它有一个元素。但问题是解释器无法将merge函数的参数m和n识别为列表,因此显示以下错误:
def merge(m, n):
x = y = 0
v = []
while x < len(m) and y < len(n):
if m[x] < n[y]:
v.append(m[x])
x = x + 1
elif m[x] > n[y]:
v.append(n[y])
y = y + 1
else:
v.append(m[x])
x, y = x + 1, y + 1
while x < len(m):
v.append(m[x])
x = x + 1
while y < len(n):
v.append(n[y])
y = y + 1
return v
def sort(a):
if len(a) == 1:
return a
else:
merge(sort(a[:len(a) // 2]), sort(a[len(a) // 2:]))
x = list(range(10, 0, -1))
sort(x)
print(x)预期结果id已排序列表。
但是python显示了这个错误:
回溯(最近一次调用):文件"",第1行,排序(X)文件"",第5行,排序合并( sort (a:len(A) // 2),sort(alen(a) // 2:))文件"",第5行,排序合并( sort (a:len(A) // 2),排序(alen(A) // 2:)文件"",第5行,在sort merge(sort(a:len(a) // 2)中,sort(alen(a) // 2:)文件"",第4行,在merge中,而x< len(m)和y< len(n):TypeError:类型为'NoneType‘的对象没有len()
发布于 2019-08-22 15:14:16
注释中记录的修复。作为另一种选择,可以一次性分配工作数组,合并排序将只使用索引,而不是创建数组的多个副本。
def merge(m, n):
x = y = 0
v = []
while x < len(m) and y < len(n):
if m[x] <= n[y]: # fix
v.append(m[x])
x = x + 1
else:
v.append(n[y])
y = y + 1
while x < len(m):
v.append(m[x])
x = x + 1
while y < len(n):
v.append(n[y])
y = y + 1
return(v)
def sort(a):
if len(a) == 1:
return(a)
else:
return(merge(sort(a[:(len(a)//2)]), sort(a[len(a)//2:])))
# test sort
x = list(range(10, 0, -1))
x = sort(x) # fix
print(x)https://stackoverflow.com/questions/57596748
复制相似问题