我无法打印队列中的每个元素

时间:2015-05-16 04:50:22

标签: python queue

我是一个完整的编程初学者。我创建了类“队列”,向它添加了一些元素并尝试打印队列的每个元素如下,但我不能。请帮我! 提前谢谢!

已编辑格式

class queue:
    def __init__(self):
        self.items = []


    def isempty(self):
        return self.items == []

    def enqueue(self,item):
        self.items.insert(0,item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def peek(self):
        return self.items[len(self.items)-1]

q=queue()

q.enqueue(1)
q.enqueue(2)
q.enqueue(3)

for n in q():
    print "This time, it's: "+ str(n)

8 个答案:

答案 0 :(得分:2)

当您创建自己的类实现时,您必须定义该类的每个行为,for循环仅适用于iterables并且要使您的对象可迭代,您需要定义您的类中的__iter__方法,只要您尝试迭代对象,就会隐式调用它。

class queue:
    def __init__(self):
        self.items = []


    def isempty(self):
        return self.items == []

    def enqueue(self,item):
        self.items.insert(0,item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def peek(self):
        return self.items[len(self.items)-1]

    def __iter__(self):
        for i in self.items:
            yield i

q=queue()

q.enqueue(1)
q.enqueue(2)
q.enqueue(3)

for n in q:
    print "This time, it's: "+ str(n)

答案 1 :(得分:1)

您需要定义一个__iter__方法以使您的队列可迭代,或者您需要修改循环以使用您定义的方法。

答案 2 :(得分:1)

您正在迭代非序列类型:

for n in q():
    print "This time, it's: "+ str(n)

这是正确的方法:

for n in q.items:
    print "This time, it's: "+ str(n)

答案 3 :(得分:1)

此处qinstance类的queue。另外q不是callableitemsinstance变量。所以你必须使用

for n in q.items:
    print "This time, it's: "+ str(n)

答案 4 :(得分:1)

定义__getitem__魔术方法可能是使队列可迭代的最简单方法。

class queue:
    def __init__(self):
        self.items = []

    def isempty(self):
        return self.items == []

    def enqueue(self,item):
        self.items.insert(0, item)

    def dequeue(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def peek(self):
        return self.items[len(self.items)-1]

    def __getitem__(self, i):
        return self.items[i]

q=queue()

q.enqueue(1)
q.enqueue(2)
q.enqueue(3)

for n in q:
    print "This time, it's: "+ str(n)

也不要使用for n in q():。那就是尝试将你的队列对象作为一个函数来调用。由于q不是函数,因此失败。

作为实现__getitem__的结果,您还可以通过索引直接在队列对象上引用队列中的元素。

e.g。

print q[0]   

打印

  

3

答案 5 :(得分:0)

嗯,你必须将队列中的东西排队打印出来!

你的课后的代码

q=queue()
q.enqueue(3)
q.enqueue(4)
q.enqueue(55)

for n in q():
    print "This time, it's: "+ str(n)

答案 6 :(得分:0)

你永远不会在队列中放任何东西。所以它是空的。因此什么都没有印刷。尝试添加一些对象(调用函数q.enqueue)然后它们可能会打印。

答案 7 :(得分:0)

在我的情况下import Queue,上面选择的答案不起作用。 真正有效的是:

for i in q.queue:
    print i