簡體   English   中英

Python在運行時合並Sort TypeError

[英]Python Merge Sort TypeError at Runtime

我正在編寫未運行的merge_sort程序。 顯示錯誤

if  a[j] < b[k]:

TypeError:“ int”和“ list”的實例之間不支持“ <”

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

看起來您在這里將整數列表附加到整數列表的末尾:

 l=l.append(b[k:])

因此,如果l = [1,2,3]和b [k:] = [4,5],您將得到

l.append(b[k:])
Out:
[1, 2, 3, [4, 5]]

同樣,list.append()返回None,並且您不需要將其分配給l。 嘗試使用

l.extend(b[k:])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM