我在寫一個腳本,它使用一個隊列來跟蹤長度爲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分解。所以思考後,我找出了它爲什麼會凍結的原因。它凍結,因爲當我將「放入」數據到隊列中時,不會自動推送隊列另一端的舊數據。所以我猜想隊列被卡住了。我是否錯過了一些東西,難道這不是一個隊列的作用點嗎?我必須打電話「獲得」嗎?無論如何不得不爲隊列調用另一個函數,當新數據被推入隊列時它會自動推出最舊的數據?
我的第二個問題:
如何查看就像一個列表整個隊列?所以:
print my_queue
結果:
[null,1, 23, 45, 5, 43]
推入5號到6號線隊列之後。
這將爲未填充的條目輸出「None」,而不是「null」,但我假設沒關係。如果你願意的話,你可以把它改成'str',''null''(儘管它會用引號打印);如果這是不可接受的,你需要自己格式化輸出,而不是依賴'list'' repr'來爲你做。 – ShadowRanger
null是僞代碼。我會仔細看看你的代碼。謝謝。 – bud
@budder:好的。通常情況下,我會省略初始值設定項,並且只需要一個'maxlen',因爲填充條目並不能真正爲您帶來任何收益,但您的示例顯示了填充項,所以我提供了它。如果您不需要填充符,只需使用以下語句進行初始化:'last_6_data_points = deque(maxlen = 6)' – ShadowRanger