【发布时间】:2018-01-27 04:51:14
【问题描述】:
我对编码非常陌生,我想知道是否可以将 python 中的数组限制为 100 个项目。
如果可能的话,您能否继续添加到该数组并推出该数组中的旧数字?因此,每次添加新号码时,都应该推出最旧的号码以腾出空间。
非常感谢您!
【问题讨论】:
我对编码非常陌生,我想知道是否可以将 python 中的数组限制为 100 个项目。
如果可能的话,您能否继续添加到该数组并推出该数组中的旧数字?因此,每次添加新号码时,都应该推出最旧的号码以腾出空间。
非常感谢您!
【问题讨论】:
是的,可以通过collections.deque:
from collections import deque
lst = deque([], 100)
就像list.append、deque.append 一样工作:
A = deque(range(10), maxlen=10)
print(A)
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
A.append(10)
print(A)
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
【讨论】:
lst.append(xxx).
如何创建一个简单的函数来做到这一点:
def add_to_array(lst, item, maxsize):
if len(lst) >= maxsize:
lst.pop(0)
lst.append(item)
像这样工作:
>>> lst = [i for i in range(1, 10)]
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> add_to_array(lst, 10, 10)
>>> lst
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> add_to_array(lst, 11, 10)
>>> lst
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
注意:如果您正在寻找更高效的东西,您可以使用collections.deque,正如另一个答案中所指出的那样。
这是一个使用deque 模拟您想要的行为的示例:
>>> lst = deque((i for i in range(1, 10)), maxlen=10)
>>> lst
deque([1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
>>> lst.append(10)
>>> lst
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
>>> lst.append(11)
>>> lst
deque([2, 3, 4, 5, 6, 7, 8, 9, 10, 11], maxlen=10)
【讨论】:
append 和pop 我认为deque 相对于list 类型的性能优势可能很重要。跨度>
lst.pop(0) 可能是你想要的。但实际上,正如@jp_data_analysis 所示,他们可能真正想要的是deque。
deque 或 queue 或指定 FIFO,我认为可以安全地假设性能不会成为问题 :-)跨度>
lst.append(item) 可能不会在if 语句中出现两次。您可以翻转条件,删除else,然后将其完全移出。