【发布时间】:2016-06-24 10:34:51
【问题描述】:
我的任务已经结束了,我现在不知道从哪里开始,代码目前看起来像这样:
def radixsorting1(n,m):
div=1
mod=10
bin_list=[]
alist=[]
r=[]
s=[]
for bins in range(0,10):
bin_list.append(Queue())
for k in range(0,m):
r.append(random.randint(1,10**n))
if not len(r)==0:
o=max(r)
y=len(str(o))
for p in range(y):
for num in r:
minsta_tal=num%mod
minsta_tal=int(minsta_tal//div)
bin_list[minsta_tal].put(num)
new_list=[]
for bins in bin_list:
while not bins.isempty():
new_list.append(bins.dequeue())
alist=new_list
return alist
我一直在尝试做的是创建 10 个队列,将它们放在一个列表中,然后从 1 到 10^n 随机 m 个数字。假设我得到 66 和 72,然后我首先按“小数”对它们进行排序,即我的数字中的 6 和 2,然后将它们放入丢失的位置,然后重新执行该过程,但数字 6 和7(较大的数字)。在其当前形状中,我得到错误“队列”对象不可迭代。
我的 Queue 类是这样的,我觉得这个还可以。
class Queue:
def __init__(self):
self.lista=[]
def put(self,x):
self.lista.append(x)
def get(self):
if not len(self.lista)==0:
return self.lista.pop(0)
def isempty(self):
if len(self.lista)==0:
return True
else:
False
def length(self):
return len(self.lista)
def dequeue(self):
if not len(self.lista)==0:
n=self.lista.pop(0)
return n
【问题讨论】:
-
是的,那不是iterable;你没有定义
__iter__或__getitem__。另外,根据the data model,您应该重命名现有方法 -
不能说我确定我做了什么,但我确实把 def __iter__(self): return self 放在了我的类函数中,但现在我得到了错误:iter() returned non-iterator of typ "Queue" ,而且我认为我的代码结尾也是错误的......
-
请edit这个问题,代码(尤其是Python)在cmets中几乎不可读。
-
对不起,这就是我的意思:正如你在代码中所说的那样,我确实在我的类队列中放了一些新代码。我仍然收到错误 Iter() 返回了“队列”类型的非迭代器。我也觉得我的 radixsorting1 代码的结尾是错误的,但我不确定如何结束它....
-
如果你是
return selffrom__iter__你还需要实现__next__。
标签: python list python-3.x queue radix