3
假設我們有deque
和maxlen=3
。如果deque
已經有3個項目,並且我append
一個新項目,我如何獲得將被丟棄的項目?如何讓物品在python deque中被丟棄?
原因是我想在內存中保留一個只包含最後N項的窗口,並且當窗口已滿並且一個項目將被丟棄時,我需要獲取該項目並執行一些額外的工作。
這是我目前的解決方案:
from collection import deque
MAX_LEN=10
q = deque(maxlen=MAX_LEN)
while True:
if len(q) == MAX_LEN:
discarded = q.popleft()
process(discarded)
q.append(some_var)
這是最好的我能得到什麼?我想過使用list
和切片清單來限制大小/丟棄物品,但if
是不可避免的。使用deque
至少我可以在push
和popleft
操作中獲得O(1)
的性能。
任何想法?
爲什麼不'處理(Q [0]); q.append(some_var)'? – Bakuriu
@Bakuriu我需要處理一個被丟棄的。所以隊列從0項開始,當它到達3項時,我需要開始處理'q [0]'。我只是想避免循環中的「if」比較。 – yegle
你的代碼沒有問題,我也不認爲你可以做得更好。雖然你*可以*擺脫'丟棄'變量。你*可以*創建一個新的子類來爲你做這個 – goncalopp