Pythonでqueue構造を使うにはqueue.Queue()があります。
しかし、これはqueueの長さを一定までにして、それを超える場合には古いものから取り除かせたい場合にはあまり向いていません。
リファレンスによると
queue.Queue()の引数で最大長が決められますが、queueがいっぱいの時は例外を送出し、
新規挿入はqueueが空くまでブロックするようです(待機させる)。
また、現在の要素数を得ようとしてもQueue.qsize()というメソッドはありますが、これは長さの近似値を返すのみです。
よって最大長を設けたい場合はかなり処理が面倒になります。
#ではどうするか
collections.deque()を使うと、すぐに今回ほしい形のqueueが得られます。
import collections
q = collections.deque([], 3)
for i in range(5):
q.append(i)
print(q)
上記のコードを実行すると以下のような出力が返ってきます。
deque([0], maxlen=3)
deque([0, 1], maxlen=3)
deque([0, 1, 2], maxlen=3)
deque([1, 2, 3], maxlen=3)
deque([2, 3, 4], maxlen=3)
最大サイズ3未満まではそのままデータが追加され、
サイズが3になったら先頭の古いデータが消えて、末尾に新しいデータが追加されます(FIFO)。
collections.deque([], 3)
でdequeを作成します。
一番目の引数が初期データ、二番目の引数が最大サイズとなっています。
データを末尾に追加する場合は
q.append()
データを先頭に追加したい場合は
q.appendleft()
末尾のデータをpopして取得したい場合は
q.pop()
先頭のデータをpopして取得したい場合は
q.popleft()
現在の要素数の取得は
len(q)
となっています。