可截断循环缓冲区的Python快速数据结构
我只是使用log.append(第行)在最近1000000个条目的列表中维护日志。为了确保当大小达到2000000时不会太长,我复制do log=log[1000000:]。然而,这是相当缓慢的 在C语言中,我可以使用链表将指针移动到日志中间的位置。然而,这不是一个很好的解决方案,因为我不能再快速跳转到日志中的特定条目可截断循环缓冲区的Python快速数据结构,python,performance,Python,Performance,我只是使用log.append(第行)在最近1000000个条目的列表中维护日志。为了确保当大小达到2000000时不会太长,我复制do log=log[1000000:]。然而,这是相当缓慢的 在C语言中,我可以使用链表将指针移动到日志中间的位置。然而,这不是一个很好的解决方案,因为我不能再快速跳转到日志中的特定条目 是否有一种python解决方案允许我在任何地方截断日志,在日志末尾添加内容,但仍然允许快速访问日志[I]?看看NumPy:它包括:,“一个强大的N维数组对象……除了其明显的科学用
是否有一种python解决方案允许我在任何地方截断日志,在日志末尾添加内容,但仍然允许快速访问日志[I]?看看NumPy:它包括:,“一个强大的N维数组对象……除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。”看看NumPy:它包括,“一个强大的N维数组对象……除了其明显的科学用途,NumPy还可以用作通用数据的高效多维容器。”list.pop(0)有什么问题?即当您达到某个长度时,而不是使用l
og.append(l)
log.append(line)
log.pop(0)
当然,这不会截断到特定的大小,而是将列表保持在一个有限的大小。list.pop(0)有什么问题?即当您达到某个长度时,而不是l
og.append(l)
log.append(line)
log.pop(0)
当然,这不会截断到特定的大小,而是将列表保持在有限的大小。您可以使用:
Deques支持线程安全、内存高效的附件和来自
具有大致相同的O(1)性能的德克两侧
在任何方向
对于py2.6之前的python版本:
追加长度检查时,如果长度大于1000000,则执行popleft
以删除最左边的项目,以便列表始终包含最后的1000000
项目
如果您的python版本是py2.6+,那么只需利用maxlen
参数:
如果未指定或未指定maxlen,则DEQUE可能会增长为任意值
否则,deque将限定为指定的最大值
长度。一旦有界长度deque已满,添加新项目时,
从另一端丢弃相应数量的项目。
有界长度deques提供类似于尾部过滤器的功能
在Unix中。它们还可用于跟踪事务和其他
仅对最近的活动感兴趣的数据池
您可以使用:
Deques支持线程安全、内存高效的附件和来自
具有大致相同的O(1)性能的德克两侧
在任何方向
对于py2.6之前的python版本:
追加长度检查时,如果长度大于1000000,则执行popleft
以删除最左边的项目,以便列表始终包含最后的1000000
项目
如果您的python版本是py2.6+,那么只需利用maxlen
参数:
如果未指定或未指定maxlen,则DEQUE可能会增长为任意值
否则,deque将限定为指定的最大值
长度。一旦有界长度deque已满,添加新项目时,
从另一端丢弃相应数量的项目。
有界长度deques提供类似于尾部过滤器的功能
在Unix中。它们还可用于跟踪事务和其他
仅对最近的活动感兴趣的数据池
您可以使用标准库中的
deque
:
它支持一个固定的最大长度,这可能会自动完成您在文档中查找的内容:
如果未指定或未指定maxlen
,则DEQUE可能会增长为任意值
否则,deque将限定为指定的最大值
长度。一旦有界长度deque已满,添加新项目时,
从另一端丢弃相应数量的项目
您可以使用标准库中的
deque
:
它支持一个固定的最大长度,这可能会自动完成您在文档中查找的内容:
如果未指定或未指定maxlen
,则DEQUE可能会增长为任意值
否则,deque将限定为指定的最大值
长度。一旦有界长度deque已满,添加新项目时,
从另一端丢弃相应数量的项目
@AshwiniChaudhary也有同样的问题,不是吗?我希望能够快速截断。当长度变为
1000001
时,您希望列表包含1000001
项还是1000000
?移动等效的“指针”(例如整数索引)会有什么问题在Python的列表中间?我怀疑正确的循环缓冲区实现会消除这些问题。@AshwiniChaudhary也有同样的问题,不是吗?我希望能够快速截断。当长度变为1000001
时,您希望列表包含1000001
项还是1000000
在Python中,将等效的“指针”(例如整数索引)移动到列表的中间位置会有问题吗?我怀疑正确的循环缓冲区实现会否定这些问题。list.pop是一个O(N)
operation。list.pop是一个O(N)
操作。