python3中的消息缓冲区表示

时间:2019-07-20 11:40:39

标签: python python-3.x data-representation

想象一下,有一个方框A。在此方框中,每1秒我们添加一定数量的消息(示例中为3 / sec),消息的信息与存储无关。消息有一个到期“日期”,对应于已过去的一定秒数。 如何在python3中以紧凑的方式表示这一点?

下面将描述一个发生的情况的示例,其中我在方框A中使用消息列表,其中每条消息均以“有效”的时间表示(这是我想到的一种表示,但尝试做得更好):

time = 0:
empty

time = 1: 
[0,0,0]

time = 2: 
[1,1,1,0,0,0]

time = 3:
[2,2,2,1,1,1,0,0,0]
...

消息将具有与它们离开缓冲区的瞬间相对应的过期时间。例如,如果“有效”时间超过5,则将其删除。

目标是能够通过简单的计算来传递多个时间步长,并且能够计算最终的缓冲区而无需一次执行一次。 (例如,从时间= 3到时间= 9)

我问这个原因是因为它不只是1个“盒子”,而是几个盒子,每个盒子每个其他盒子都有一个缓冲区。因此,它必须尽可能简单。如果需要澄清,请在下面发表评论,我很乐意澄清问题。

1 个答案:

答案 0 :(得分:0)

最终答案将取决于总体规模,每个盒子中缓冲区数量的可变性,盒子数量和秒数。有了很多变化,对象表示可能是一个优势,但是如果事情相对简单,那么列表列表将是一个好的开始。

如果您每秒存储的值的数量始终为3,则可以保留一个固定列表,仅使用maxlength * 3来抛出过期的值。以下假设值的数量有所不同。

time = 0:
[]

time = 1: 
[[0,0,0]]

time = 2: 
[[1,1,1],[0,0,0]]

time = 3:
[[2,2,2],[1,1,1],[0,0,0]]

要添加到列表的最前面,然后将列表截断为最大长度(如果较短则不会导致错误)

buffer.insert(0, new_values_list)
del buffer[maxlen:]

最后,如果您在使用列表时需要再次整理列表。

import itertools
flat_buffer = list(itertools.chain.from_iterable(buffer))

如前所述,您可能想使用对象来保持事物的有条理,例如通过将box变成类。