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

I can't print each element in a queue

我完全是编程初学者。我创建了 class "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)

好吧,你必须在队列中加入一些东西才能打印出来!

此代码在您的 class

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

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

你从来没有把任何东西放在队列中。所以它是空的。因此没有任何内容被打印出来。尝试添加一些对象(调用函数 q.enqueue),然后它们可能会打印出来。

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

当您创建自己的 class 实现时,您必须定义该 class 的每个行为,for 循环仅适用于 iterables为了让你的对象可迭代,你需要在你的 class 中定义 __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)

您正在迭代非序列类型:

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

正确的方法是:

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

这里 q 是 class queueinstance。另外 q 不是 callable。而 itemsinstance variable.So 你必须使用

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

定义 __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__ 的结果,您还可以通过索引直接在队列对象上引用队列中的元素。

例如

print q[0]   

打印

3

在我的例子中,当 import Queue 上面选择的答案不起作用时。 真正有效的是:

for i in q.queue:
    print i