2016-04-22 11 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を返します。これはintと連結してlistに連結できません。

blsort(L[1:])NoneTypeであると仮定します。タイプintにするために何ができるのですか?intlistに連結することはできますか?

+1

あなたは後に、ここでは何も返さないされた第2の場合の条件 '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

本当に解決策の一部でした。ソリューションの2番目の部分はL [0]の代わりに[0](つまりリスト項目として '0')を書くことでした。

このコードは、ここでそれを修正:

def blsort(L): 
if len(L) == 0: 
    return [] 
elif L[0] == 0: 
    return [0] + blsort(L[1:]) 
else: 
    return blsort(L[1:]) + [1] 
関連する問題