我无法打印队列中的每个元素
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 queue
的 instance
。另外 q
不是 callable
。而 items
是 instance
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
我完全是编程初学者。我创建了 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 queue
的 instance
。另外 q
不是 callable
。而 items
是 instance
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