【问题标题】:Replace values in an array or list continuously连续替换数组或列表中的值
【发布时间】:2018-01-27 04:51:14
【问题描述】:

我对编码非常陌生,我想知道是否可以将 python 中的数组限制为 100 个项目。

如果可能的话,您能否继续添加到该数组并推出该数组中的旧数字?因此,每次添加新号码时,都应该推出最旧的号码以腾出空间。

非常感谢您!

【问题讨论】:

    标签: python arrays list


    【解决方案1】:

    是的,可以通过collections.deque

    from collections import deque
    
    lst = deque([], 100)
    

    就像list.appenddeque.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).
    【解决方案2】:

    如何创建一个简单的函数来做到这一点:

    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)
    

    【讨论】:

    • 值得指出:鉴于固定长度队列的目的是appendpop 我认为deque 相对于list 类型的性能优势可能很重要。跨度>
    • 这与提问者想要的相反——当添加更多而不是最旧的时,最新的条目被踢出。 lst.pop(0) 可能是你想要的。但实际上,正如@jp_data_analysis 所示,他们可能真正想要的是deque
    • @jp_data_analysis 指出。还值得指出:OP 是编码新手,可能正在寻找像这样简单的东西。话虽如此,这肯定效率较低,但我认为目前这对 OP 来说不是问题。
    • 考虑到 OP 不知道询问 dequequeue 或指定 FIFO,我认为可以安全地假设性能不会成为问题 :-)跨度>
    • @RoadRunner。引入现有工具和技术 来重新发明轮子是个好主意。话虽如此,lst.append(item) 可能不会在if 语句中出现两次。您可以翻转条件,删除else,然后将其完全移出。
    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2021-12-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多