2016-08-16 9 views
0

リストを作成する際に問題が発生しています 基数ソート用のロジック部分が完成しました。ここ は、コードは次のとおりです。基数ソートのヘルプが必要

import math 

a = [4, 15, 7, 3, 6, 22, 45, 82] 

a1 = [[] for _ in xrange(len(a))] 
a2 = [[] for _ in xrange(len(a))] 
a3 = [[] for _ in xrange(len(a))] 
a4 = [[] for _ in xrange(len(a))] 
b = [[] for _ in xrange(10)] 
b2 = [[] for _ in xrange(10)] 
d=len(str(max(a))) 



[str(item).zfill(d) for item in a] 

print a 

すべての桁の長さは桁

のなしなした最大のものと同じになるように、コードのこの部分は数字の前にゼロを追加することがa = [ 04 , 15 , 07 , 03 , 06 , 22 , 45 , 82 ]を与えます

for x in xrange(0,len(a)) : 
    a1[x].append(a[x]%10) 
    print a1 

print '\n' 

a1 = [[4], [5], [7], [3], [6], [2], [5], [2]] 
を次のように、これは各数字 の終了桁を保存します

次の部分では、バケット番号がnoの末尾の数字と一致する場合、 です。その桁の数字がその桁に格納されます。

i=0 
for x in xrange(0,len(a)) :  
    for u in range(0,len(a)) : 
    if a1[u]==[i] : 
     b[x].append(a[u]) 
    i=i+1 


for u in range(0,len(a)) : 
    print b[u] 

次のように出力は次のようになります。

[] 
[] 
[22, 82] 
[3] 
[4] 
[15, 45] 
[6] 
[7] 

この部分はノーをピックアップします。バケット番号から始まるバケットから。バケツ番号にはゼロ。 10

for k in range(0,len(a)) :  
l=len(b[k]) 
for t in range(0,l) : 
    a2[k]=b[k][t] 
    print a2[k] 

a2が

22 
82 
3 
4 
15 
45 
6 
7 

ですが、私はthis-

print a2[0] 

のように、それを印刷するとき、それは私が保存したくない

[] 

いますそのa2リストの空の値 方法それを避ける?

私は、 "バケツが空であれば、いいえ、単にループを続ける"のような条件を使用しなければならないことを知っています。 このコードを書く方法はわかりません。

は、私は私が

if len(b[k][t])==0 : 
     continue 
else : 
    a2[k]=b[k][t] 
    print a2[k] 

を追加する必要があると思います。しかし、

Traceback (most recent call last): 
    File "prog.py", line 39, in <module> 
TypeError: object of type 'int' has no len() 
+0

39行目の内容はありますか? – Benjamin

+0

行39:len(b [k] [t])== 0: –

答えて

0

b[?]は、整数の配列で働いていないので、b[k][t]は整数になりますが、あなたは取るしようとしているその長さはif len(b[k][t])==0:です。

a2の空要素を避ける唯一の方法は、配列を使用しないことです。例えば、辞書である。

+0

a2に空の値を追加しないようにコードを書く方法はわかりません。私はその部分で助けを必要と –

+0

私はまだ今 –

+0

を取得していないです私は得たそれ 'E = 0の範囲のkについて (0、LEN(A)):tに対して リットル= LEN(B [K]) 範囲(0、L)において: A2 [K] = bの[K] [T] E = E + 1 印刷 'のA2の= [なし] *を記述する 必要a2' 8' –