附加到固定大小的列表中

Appending into fix-sized list

我正在寻找一种简单的方法来附加到固定大小的列表中。

如果列表有最大值 n 并且有另一个项目追加到这个列表中,list 的第一个项目将被删除。

有一种方法,但我认为它效率不高,而且太过分了。我应该怎么做?

class fix_sized_list():
    def __init__(self,_max):
        self.max = _max
        self._list = []

    def add(self,item):
        print len(self._list)
        if len(self._list)>=self.max:
            self._list.pop(0)
            self._list.append(item)
        else:
            self._list.append(item)


c = fix_sized_list(8)

for x in range(50):
    c.add(x)
    print c._list

输出:

[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 5, 6, 7, 8, 9]

不使用列表,而是使用 deque (which essentially works like a simple queue data strcuture). Provide it a maxlen 参数来固定其大小。

>>> from collections import deque
>>> queue = deque(maxlen=2)
>>> queue.append(1)
>>> queue
deque([1], maxlen=2)
>>> queue.append(2)
>>> queue
deque([1, 2], maxlen=2)
>>> queue.append(3)
>>> queue
deque([2, 3], maxlen=2)