【发布时间】:2015-09-29 13:40:41
【问题描述】:
我正在编写一个脚本,它使用队列来跟踪长度为 N 的列表的最后六个数字。换句话说,当我遍历长度为 N 的列表时,我想跟踪最后六个数字。我认为队列是一个很好的结构,因为它会在我推入一个新号码时自动推出最后的第 6 个号码。我的代码如下:
if __name__ == '__main__':
data = [1,23,45,5,43,2,54,2,34,32]
scub = DataScrubber(data)
scub.scrub_zeros(0.01)
print "TEST"
def scrub_zeros(self,upperzero_range):
scrubbed_data = []
last_6_data_points = Queue.Queue(6)
for data in self.data:
print last_6_data_points
print scrubbed_data
last_6_data_points.put(data)
scrubbed_data.append(data)
self.data = scrubbed_data
当我运行这个脚本时,我得到以下输出:
<Queue.Queue instance at 0x03E25D00>
[]
<Queue.Queue instance at 0x03E25D00>
[1]
<Queue.Queue instance at 0x03E25D00>
[1, 23]
<Queue.Queue instance at 0x03E25D00>
[1, 23, 45]
<Queue.Queue instance at 0x03E25D00>
[1, 23, 45, 5]
<Queue.Queue instance at 0x03E25D00>
[1, 23, 45, 5, 43]
<Queue.Queue instance at 0x03E25D00>
[1, 23, 45, 5, 43, 2]
但是,此脚本永远不会停止运行。它冻结了,我必须使用 ctrl+break 打破。所以经过深思熟虑,我弄清楚了它冻结的原因。它冻结是因为当我将数据“放入” 到队列中时,它不会自动将旧数据推送到队列的另一端。所以我猜队列被卡住了。我错过了什么吗,这不是队列工作的重点吗?我必须调用“get”吗?无论如何都必须为队列调用另一个函数,当新数据被推入队列时它会自动推出最旧的数据?
我的第二个问题:
如何像列表一样查看整个队列?所以:
print my_queue
结果:
[null,1, 23, 45, 5, 43]
将 5 个号码推入 6 行队列后。
【问题讨论】:
标签: python python-2.7 queue