运行时Python合并排序类型错误
我正在编写一个未运行的合并排序程序。 它显示了错误运行时Python合并排序类型错误,python,python-3.x,mergesort,Python,Python 3.x,Mergesort,我正在编写一个未运行的合并排序程序。 它显示了错误 if a[j] < b[k]: TypeError:“看起来您正在将整数列表附加到此处整数列表的末尾: l=l.B[k:] 所以如果l=[1,2,3]和b[k:][4,5],你会得到 l、 附录B[k:] 输出: [1, 2, 3, [4, 5]] 另外,list.append返回None,您不需要将其分配给l。尝试使用 l、 extendb[k:] 小心,您正在操作循环中的全局变量l。我怀疑这是您的本意。当询问产生异常的代码时,您
if a[j] < b[k]:
TypeError:“看起来您正在将整数列表附加到此处整数列表的末尾: l=l.B[k:] 所以如果l=[1,2,3]和b[k:][4,5],你会得到 l、 附录B[k:] 输出: [1, 2, 3, [4, 5]] 另外,list.append返回None,您不需要将其分配给l。尝试使用 l、 extendb[k:]
小心,您正在操作循环中的全局变量l。我怀疑这是您的本意。当询问产生异常的代码时,您应该始终在问题中包含完整的回溯。复制回溯并将其粘贴到问题中,然后将其格式化为代码选择它并键入ctrl K当您进行合并\u sorta和合并\u sortb时,您不会更改a和b。确保执行a=merge\u sorta和b=merge\u sortb。@chrisayock每次调用函数时都会创建一个单独的副本。那它怎么会引起问题呢?没有单独的副本。但是,函数中的名称l是函数的局部名称,因此它是全局范围中l的单独名称。
l=[int(n) for n in input().split()]
def merge_sort(l):
if len(l)==1:
return l
else:
a=l[:len(l)//2]
b=l[len(l)//2:]
print(a,b)
a=merge_sort(a)
b=merge_sort(b)
j=0
k=0
for i in range(0,len(l)):
if a[j] < b[k]:
l[i]=a[j]
j+=1
if j==len(a):
l=l.append(b[k:])
break
else:
l[i]=b[k]
k+=1
if k==len(b):
l=l.append(a[j:])
break
# print(l)
return l
print(merge_sort(l))
Traceback (most recent call last):
File "E:/STUFF/Python/Scripts/COURSERA/merge_sort.py", line 30, in <module>
print(merge_sort(l))
File "E:/STUFF/Python/Scripts/COURSERA/merge_sort.py", line 10, in merge_sort
merge_sort(b)
File "E:/STUFF/Python/Scripts/COURSERA/merge_sort.py", line 15, in merge_sort
if a[j] < b[k]:
TypeError: '<' not supported between instances of 'int' and 'list'
Process finished with exit code 1