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

时间:2018-01-27 04:51:15

标签: python arrays list

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

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

非常感谢你!

2 个答案:

答案 0 :(得分:13)

是的,可以通过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)

答案 1 :(得分:6)

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

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)