附加到修复大小的列表

时间:2015-12-05 13:10:31

标签: python list built-in

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

如果列表的最大值为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]

1 个答案:

答案 0 :(得分:4)

使用deque(基本上就像简单的队列数据结构),而不是列表。提供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)