Python,将列表强制为固定大小

2024-05-12 22:03:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python(3)中,我想创建一个包含最后5个输入变量的列表。 下面是一个例子:

>>>l = []
>>>l.append('apple')
>>>l.append('orange')
>>>l.append('grape')
>>>l.append('banana')
>>>l.append('mango')
>>>print(l)
['apple','orange','grape','banana','mango']
>>>l.append('kiwi')
>>>print(l)
['orange','grape','banana','mango','kiwi'] #only 5 items in list

那么,在python中,有什么方法可以实现上面演示的功能吗?变量不需要是一个列表,我只是用它作为一个例子。

谢谢!


Tags: 方法inappleonly列表itemslist例子
3条回答

我也遇到过同样的问题。。。由于访问速度/可靠性问题,不支持来自deque的maxlen=5选项。

简单解决方案:

l = []
l.append(x)                         # add 'x' to right side of list
l = l[-5:]                          # maxlen=5

附加后,只需将“l”重新定义为“l”的最新五个元素。

print(l)

结束吧。

为了你的目的你可以停在那里。。。但我需要一个popleft()。而pop()则从右边刚附加的位置删除项。。。pop(0)将其从左侧移除:

if len(l) == 5:                     # if the length of list 'l' has reached 5 
    right_in_left_out = l.pop(0)    # l.popleft()
else:                               #
    right_in_left_out = None        # return 'None' if not fully populated

给Tradewave.net的James的帽子小费

不需要类函数或deque。

更进一步。。。附加左键和右键:

l = []
l.insert(0, x)                      # l.appendleft(x)
l = l[-5:]                          # maxlen=5

如果您想在不使用deque的情况下预先加载列表,那么appendleft()就相当于

最后,如果你选择从左边附加。。。

if len(l) == 5:                     # if the length of list 'l' has reached 5 
    left_in_right_out = l.pop()     # pop() from right side
else:                               #
    left_in_right_out = None        # return 'None' if not fully populated

你可以将list子类化

>>> class L(list):
...     def append(self, item):
...         list.append(self, item)
...         if len(self) > 5: self[:1]=[]
... 
>>> l = L()
>>> l.append('apple')
>>> l.append('orange')
>>> l.append('grape')
>>> l.append('banana')
>>> l.append('mango')
>>> print(l)
['apple', 'orange', 'grape', 'banana', 'mango']
>>> l.append('kiwi')
>>> print(l)
['orange', 'grape', 'banana', 'mango', 'kiwi']
>>> 

您可能希望将collections.deque对象与maxlen构造函数参数一起使用:

>>>l = collections.deque(maxlen=5)
>>>l.append('apple')
>>>l.append('orange')
>>>l.append('grape')
>>>l.append('banana')
>>>l.append('mango')
>>>print(l)
deque(['apple','orange','grape','banana','mango'], maxlen=5)
>>>l.append('kiwi')
>>>print(l)
deque(['orange','grape','banana','mango','kiwi'], maxlen=5) #only 5 items in list

相关问题 更多 >