在基数排序方面需要帮助
Need help in Radix sort
我在创建列表时遇到问题
我完成了基数排序的逻辑部分。
这是代码:
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]]
在接下来的部分中,如果bucket 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
但是当我打印它时,像这样-
print a2[0]
它给出
[]
我不想在 a2 列表中存储空值
如何避免?
我知道我必须使用像 "if bucket is empty dont put the no just continue the loop" 这样的条件
我不知道如何为此编写代码。
我想我需要添加
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()
每个 b[?]
都是一个整数数组,因此 b[k][t]
将是一个整数,但您正试图在 if len(b[k][t])==0:
.
中获取它的长度
避免 a2
的元素为空的唯一方法是不使用数组;例如,字典。
我在创建列表时遇到问题 我完成了基数排序的逻辑部分。 这是代码:
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]]
在接下来的部分中,如果bucket 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
但是当我打印它时,像这样-
print a2[0]
它给出
[]
我不想在 a2 列表中存储空值 如何避免?
我知道我必须使用像 "if bucket is empty dont put the no just continue the loop" 这样的条件 我不知道如何为此编写代码。
我想我需要添加
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()
每个 b[?]
都是一个整数数组,因此 b[k][t]
将是一个整数,但您正试图在 if len(b[k][t])==0:
.
避免 a2
的元素为空的唯一方法是不使用数组;例如,字典。