连续替换数组或列表中的值

Mat*_*ron 6 python arrays list

我对编码很新,我想知道是否可以将python中的数组限制为100个项目.

如果有可能,你可以继续添加到该阵列并推出阵列中的旧数字吗?因此,每次添加新号码时,应将最旧的号码推出以腾出空间.

非常感谢你提前!

jpp*_*jpp 13

是的,可以通过collections.deque:

from collections import deque

lst = deque([], 100)
Run Code Online (Sandbox Code Playgroud)

就像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)
Run Code Online (Sandbox Code Playgroud)

  • 使用`lst.append(xxx)`. (4认同)

Roa*_*ner 6

如何创建一个简单的函数来执行此操作:

def add_to_array(lst, item, maxsize):

    if len(lst) >= maxsize:
        lst.pop(0)

    lst.append(item)
Run Code Online (Sandbox Code Playgroud)

其工作方式如下:

>>> 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]
Run Code Online (Sandbox Code Playgroud)

注意:如果您正在寻找更有效的东西,您可以使用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)
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是:鉴于固定长度队列的目的是`append`和`pop`,我认为`deque`比`list`类型的性能优势可能很重要. (4认同)
  • @jp_data_analysis点注意到.值得指出的是:OP是编码的新手,可能正在寻找像这样简单的东西.话虽如此,这肯定是效率低下的,但我不认为此时应该是OP的问题. (3认同)
  • 这与提问者想要的相反 - 当添加更多而不是*最老*时,*最新*条目被踢出.`lst.pop(0)`可能就是你想要的.但实际上,正如@jp_data_analysis所示,他们可能真正想要的是"deque". (2认同)
  • 考虑到OP不知道询问`deque`或`queue`或指定`FIFO`,我认为可以安全地假设性能不会成为问题:-) (2认同)