2016-04-22 39 views
0

我想排序二进制列表,它应该像这样工作:递归无法连接'int'和'NoneType' - 如何将'NoneType'更改为'int'?

>>> blsort([1, 0, 1]) 
[0, 1, 1] 

所以我做了这个代码:

def blsort(L): 
if L == []: 
    return [] 
elif L[0] == 0: 
    L.insert(0, 0) 
else: 
    L.append(1) 
    return L[0] + blsort(L[1:]) 

但我只得到这个错误:

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' 

所以不知何故,这段代码返回一个NoneType,我不能连接intlist

我假设blsort(L[1:])NoneType类型。我能做些什么来使它的类型为int,所以我可以将它与其他int连接到list

+1

你是不是在这里后,返回任何第二,如果条件'L.insert(0,0)' – AKS

+0

你为什么不使用'list.sort()' ? – Aurel

+0

我无法使用list.sort(),它是学校的一项任务,重点在于学习递归,因此不允许使用list.sort() – Manuel

回答

1

您还没有经过第二if条件返回任何东西:

elif L[0] == 0: 
    L.insert(0, 0) 

所以,当这个语句执行的blsort回报是None导致错误。

return L[0] + blsort(L[1:]) 
+0

此外,终止条件会导致“TypeError”。 – letmutx

+0

是的,我也不确定整个程序。 – AKS

0

感谢您的回答,那确实是解决方案的一部分。解决方案的第二部分是写[0](所以'0'作为列表项)而不是L [0]。这里

此代码固定它:

def blsort(L): 
if len(L) == 0: 
    return [] 
elif L[0] == 0: 
    return [0] + blsort(L[1:]) 
else: 
    return blsort(L[1:]) + [1] 
相关问题