sort()返回None

int*_*ser 1 python sorting recursion return python-3.x

码:

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))
Run Code Online (Sandbox Code Playgroud)

代码输出None,即使它应该在两种情况下返回一个空列表:

return []
Run Code Online (Sandbox Code Playgroud)

a2=self.mergeSort(a)
b2=self.mergeSort(b)
if a2==None or b2==None:
    a2=[]
    b2=[]
return (a2+b2).sort()
Run Code Online (Sandbox Code Playgroud)

详细信息:代码用于我为python练习制作的列表排序模块(我在python中相对较新).sort1是一个修改过的mergesort.

Reu*_*ani 8

list.sort返回None(就地排序):

>>> [].sort() is None
True
Run Code Online (Sandbox Code Playgroud)

你在这里使用它:

return (a2+b2).sort()
Run Code Online (Sandbox Code Playgroud)

使用sorted排序到一个新的列表,而不是就地:

return sorted(a2+b2)
Run Code Online (Sandbox Code Playgroud)