2017-08-06 80 views
1

我的代碼---->Python:append()方法不允許插入排序?

A = [17, 15, 5, 20, 99, 100] 

left = [] 
right = [] 
left.append(A[ : len(A)/2 ]) 
#right.append(A[ len(A)/2 : ]) 

print("Left Before Sort : {l}".format(l=left)) 

for j in range(1, len(left)): 
     key = left[j] 
     i = j - 1 
     while (i >= 0 and left[i] > key): 
      left[i+1] = left[i] 
      i -= 1 
     left[i+1] = key 




print("Left After Sort {l}".format(l=left)) 

爲什麼左邊是不是得了排序?我嘗試了不同的命名......但輸出相同。

+3

改爲使用'left.extend'。問題是追加一個列表使得列表中的單個元素在更大的列表中。可以這麼說,它並沒有擴展它。 –

+0

'len(left)== 1'。 '.append(A [:len(A)/ 2]))'將'list'附加到''left''包含'A'的前半部分。你可能想'擴展()' – dhke

+0

擴展或切片,'left = A [:len(A)/ 2]' –

回答

3

問題是你在列表中追加列表。

試試這個: A = [17,15,5,20,99,100]

left=[];right=[] 
left = A[ : len(A)/2 ]   # Here I made change 
#right.append(A[ len(A)/2 : ]) 

print "Left Before Sort : ",left 

for j in range(len(left)): 
     key=left[j] 
     i=j-1 
     while (i>=0 and left[i]>key): 
      left[i+1]=left[i] 
      i -=1 
     left[i+1]=key 




print "Left After Sort ",left 

輸出

Left Before Sort : [17, 15, 5] 
Left After Sort [5, 15, 17] 

如果你真的要追加然後嘗試通過追加每個元素一個一個:

for i in A[:len(A)/2]: 
    left.append(i)