基数排序,“队列”对象不可迭代

时间:2016-06-24 10:34:51

标签: python list python-3.x queue radix

我的任务已经结束,我不知道我现在从哪里开始,代码目前看起来像这样:

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个队列,将它们放入列表中,然后随机m个数字从1到10 ^ n。让我说我得到了66和72,然后我首先用“小数字”对它们进行排序,即我的数字中的6和2,然后将它们丢失,然后再重复这个过程,但对于数字6和7(数字越大)。在其当前形状中,我得到错误“Queue”对象不可迭代。

My 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

1 个答案:

答案 0 :(得分:1)

您需要添加更多代码才能使其成为可迭代的。 __iter__应该返回一个迭代器。迭代器应该有next方法。

看看这个:

Build a Basic Python Iterator

所以我理解你要迭代的东西是self.lista的内容......为什么不返回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