【问题标题】:Is there a way to create array in python that keeps its length fixed?有没有办法在 python 中创建数组以保持其长度固定?
【发布时间】:2017-07-31 08:26:04
【问题描述】:

为了在 python 中实时绘制 COM 端口数据,我需要制作一个固定长度的数组,如果收到新值,它将保留在最后一个索引处,当数组被填充时,在下一次更新时,它会在第一个索引处转储值.换句话说,它在最后一个索引处保留最新值,并在第一个索引处清空值(以保持长度固定)

【问题讨论】:

  • 听起来你想要一个堆栈而不是一个数组。了解如何实现堆栈here

标签: python arrays python-3.x


【解决方案1】:

您描述的基本上是一个固定长度的双端队列(通常称为双端队列)。

你可以使用 Python 的内置双端队列:

from collections import deque

d = deque(maxlen=2)

for i in range(10):
    d.append(i)
    print(d)

# deque([0], maxlen=2)
# deque([0, 1], maxlen=2)
# deque([1, 2], maxlen=2)
# deque([2, 3], maxlen=2)
# deque([3, 4], maxlen=2)
# deque([4, 5], maxlen=2)
# deque([5, 6], maxlen=2)
# deque([6, 7], maxlen=2)
# deque([7, 8], maxlen=2)
# deque([8, 9], maxlen=2)

您也可以使用appendleft 代替append

for i in range(10):
    d.appendleft(i)
    print(d)

# deque([0], maxlen=2)
# deque([1, 0], maxlen=2)
# deque([2, 1], maxlen=2)
# deque([3, 2], maxlen=2)
# deque([4, 3], maxlen=2)
# deque([5, 4], maxlen=2)
# deque([6, 5], maxlen=2)
# deque([7, 6], maxlen=2)
# deque([8, 7], maxlen=2)
# deque([9, 8], maxlen=2)


或者,如果你想要它,你可以继承列表并自己实现append。请注意略有不同的结果:

class MyList(list):
    def __init__(self, max_len, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.max_len = max_len

    def append(self, obj):
        if len(self) < self.max_len:
            super().append(obj)
        else:
            self.insert(0, obj)  # inserting to the left
            self.pop()           # deleting the last element on the right

li = MyList(2)

for i in range(10):
    li.append(i)
    print(li)

# [0]
# [0, 1]
# [2, 0]
# [3, 2]
# [4, 3]
# [5, 4]
# [6, 5]
# [7, 6]
# [8, 7]
# [9, 8]

【讨论】:

  • 他想删除第一个并在最后附加是我从他的问题中理解的。 `stack = [3, 4, 5]` > stack.pop(0) > stack.append(6) 给出[4,5,6]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2021-07-21
  • 1970-01-01
相关资源
最近更新 更多