基数排序,“Queue”对象不是iterab

2024-05-23 16:31:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务结束了,我不知道我现在的处境,代码现在是这样的:

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,然后将它们放入一个lost中,然后再重复这个过程,但对于数字6和7(较大的数字)。在其当前形状中,我得到错误“Queue”object is not iterable。在

我的排队课看起来像这样,我觉得这个还可以。在

^{pr2}$

Tags: indivmodnewforbinnotrange
1条回答
网友
1楼 · 发布于 2024-05-23 16:31:33

你需要添加更多的代码使它成为iterable。__iter__应返回迭代器。迭代器应该有一个next方法。在

看看这个:

Build a Basic Python Iterator

所以我的理解是你要迭代的是self.lista的内容。。。为什么不直接返回lista的迭代器呢。在

以下是最简单的方法:

class Queue:
    ...
    def __iter__(self):
        return self.lista.__iter__()

很难看出你到底想要什么。。如果您要做的是空的lista当您迭代它(队列是一种fifo类似的交易),那么它应该这样做:

^{pr2}$

相关问题 更多 >