2016-01-10 77 views
1

代碼:排序()返回無

import math 
import time 
import random 
class SortClass(object): 
    def sort1(self, l): 
     if len(l)==1: 
      return l 
     elif len(l)==2: 
      if l[0]<l[1]: 
       return l 
      else: 
       return l[::-1] 
     else: 
      pivot=math.floor(len(l)/2) 
      a=l[pivot:] 
      b=l[:pivot] 
      a2=self.sort1(a) 
      b2=self.sort1(b) 
      if a2==None or b2==None: 
       a2=[] 
       b2=[] 
      return (a2+b2).sort() 
     return [] 
Sort=SortClass() 
x=[20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] 
print(Sort.sort1(x)) 

代碼輸出無即使它應該在兩種情況下返回一個空列表:

return [] 

a2=self.mergeSort(a) 
b2=self.mergeSort(b) 
if a2==None or b2==None: 
    a2=[] 
    b2=[] 
return (a2+b2).sort() 

詳細信息: 該代碼是我爲python練習製作的列表排序模塊(我在python中比較新)。 sort1是一個修改後的mergesort。

回答

1

@reut第一次到達它,但

return sorted(a2+b2) 

return (a2+b2).sort() 

此外

if a2 == None or b2 == None: 
    a2 = [] 
    b2 = [] 

應該

if a2 == None: 
    a2 = [] 
if b2 == None: 
    b2 = [] 

你同時設置爲[]如果任是沒有意義,如果a2爲[1]和b2是沒有你扔掉a2。我猜這是無意的。

另外,在你的代碼,你必須在除下sortClass

返回一個大寫的S [] 永遠不會返回,否則上面並沒有允許它存在。

+0

修復了我的文章的語法/拼寫。 –

+0

對於Nones的支票只是因爲它返回無,但無論如何感謝。 –

8

list.sort回報None(各種就地):

>>> [].sort() is None 
True 

你在這裏使用它:

return (a2+b2).sort() 

使用sorted整理到一個新的列表,而不是就地:

return sorted(a2+b2) 
+0

反應非常快! –