基数排序,"Queue" 对象不可迭代
Radix sorting, "Queue" object not iterable
我的任务已经结束,我不知道我现在从哪里去了,代码目前看起来像这样:
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,然后我首先按 "small number" 对它们进行排序,即我的数字中的 6 和 2,然后将它们放入 lost,然后重新执行整个过程但数字 6和 7(较大的数字)。在其当前形状中,我得到错误 "Queue" object is not iterable.
我的队列 class 看起来像这样,我认为这个还可以。
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
您需要添加更多代码以使其成为可迭代的。 __iter__
应该 return 一个迭代器。迭代器应该有一个 next
方法。
看看这个:
Build a Basic Python Iterator
所以我的理解是你想要迭代的东西是 self.lista
的内容......为什么不只是 return lista
的迭代器。
这是最简单的方法:
class Queue:
...
def __iter__(self):
return self.lista.__iter__()
有点难看出你到底想要什么..如果你想做的是空的lista
当你迭代它时(队列是一个先进先出的交易)那么它宁愿这样做:
class Queue:
...
def __iter__(self):
return self
def next(self):
if self.lista: #since empty lists are Falsey
return self.lista.pop(0)
raise StopIteration
我的任务已经结束,我不知道我现在从哪里去了,代码目前看起来像这样:
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,然后我首先按 "small number" 对它们进行排序,即我的数字中的 6 和 2,然后将它们放入 lost,然后重新执行整个过程但数字 6和 7(较大的数字)。在其当前形状中,我得到错误 "Queue" object is not iterable.
我的队列 class 看起来像这样,我认为这个还可以。
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
您需要添加更多代码以使其成为可迭代的。 __iter__
应该 return 一个迭代器。迭代器应该有一个 next
方法。
看看这个:
Build a Basic Python Iterator
所以我的理解是你想要迭代的东西是 self.lista
的内容......为什么不只是 return lista
的迭代器。
这是最简单的方法:
class Queue:
...
def __iter__(self):
return self.lista.__iter__()
有点难看出你到底想要什么..如果你想做的是空的lista
当你迭代它时(队列是一个先进先出的交易)那么它宁愿这样做:
class Queue:
...
def __iter__(self):
return self
def next(self):
if self.lista: #since empty lists are Falsey
return self.lista.pop(0)
raise StopIteration