代码:
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))
代码输出None,即使它应该在两种情况下返回一个空列表:
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。
答案 0 :(得分:8)
list.sort
返回None
(就地排序):
>>> [].sort() is None
True
你在这里使用它:
return (a2+b2).sort()
使用sorted
排序到新列表而不是就地:
return sorted(a2+b2)
答案 1 :(得分: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.另外 返回[] 永远不会回来,上面的其他内容不允许。