附加到固定大小的列表中
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)
我正在寻找一种简单的方法来附加到固定大小的列表中。
如果列表有最大值 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)