Python/Cython/Numpy高效地维护具有最大长度的列表

Python/Cython/Numpy高效地维护具有最大长度的列表,python,python-3.x,algorithm,numpy,cython,Python,Python 3.x,Algorithm,Numpy,Cython,我需要一些技巧或解决方案,告诉我如何将对象列表(dicts或通过Cython定制的Python类型)有效地限制在最大长度 基本上,这样做需要花费太多的时间: my_list=[a,b,c,d,…] 我的清单=我的清单[-50:] 有没有什么有效的方法可以使用Python、Cython(C/C++)、Numpy创建一个列表,从而忘记在阈值以上添加到列表中的最旧项?例如,超过50项。Python的collections模块具有或“双端队列”,可以在数组的开头或结尾对其进行有效操作。你可以把一个最大

我需要一些技巧或解决方案,告诉我如何将对象列表(dicts或通过Cython定制的Python类型)有效地限制在最大长度

基本上,这样做需要花费太多的时间:

my_list=[a,b,c,d,…]
我的清单=我的清单[-50:]

有没有什么有效的方法可以使用Python、Cython(C/C++)、Numpy创建一个列表,从而忘记在阈值以上添加到列表中的最旧项?例如,超过50项。

Python的collections模块具有或“双端队列”,可以在数组的开头或结尾对其进行有效操作。你可以把一个最大的尺寸像这样

from collections import deque
d = deque(maxlen=5)

d.extend(range(4)) # -> [0,1,2,3]    # before maxlen
d.append(4)        # -> [0,1,2,3,4]  # at max len
d.append(5)        # -> [1,2,3,4,5]  # drops first entry on appending beyond maxlen

Python的collections模块具有or“双端队列”,可以在数组的开头或结尾对其进行有效操作。你可以把一个最大的尺寸像这样

from collections import deque
d = deque(maxlen=5)

d.extend(range(4)) # -> [0,1,2,3]    # before maxlen
d.append(4)        # -> [0,1,2,3,4]  # at max len
d.append(5)        # -> [1,2,3,4,5]  # drops first entry on appending beyond maxlen


你需要固定时间随机访问吗?不完全熟悉“固定时间随机访问”这个术语,但我基本上需要它们添加的正确顺序。它被用来记录历史。(金融时间序列数据)。除非每次使用返回列表时都能更快地使用它。为什么我的问题被否决了?请在向下投票时添加解释,以便人们可以改进问题或避免以后犯类似错误。我没有向下投票。固定时间随机访问意味着您可以在固定时间内获得任何索引的值,即时间不取决于容器的大小。Python的列表和nympy/C/C++数组具有此属性。如果你要经常遍历和索引这个结构,你需要这个属性。你需要固定时间随机访问吗?不完全熟悉“固定时间随机访问”这个术语,但我基本上需要它们添加的正确顺序。它被用来记录历史。(金融时间序列数据)。除非每次使用返回列表时都能更快地使用它。为什么我的问题被否决了?请在向下投票时添加解释,以便人们可以改进问题或避免以后犯类似错误。我没有向下投票。固定时间随机访问意味着您可以在固定时间内获得任何索引的值,即时间不取决于容器的大小。Python的列表和nympy/C/C++数组具有此属性。如果你要经常遍历和索引这个结构,你需要这个属性。这看起来像我需要的:)谢谢!我打算推荐同样的东西,这就是为什么我问OP关于访问时间复杂性的原因。我相信,你应该大发雷霆,索引队列是没有效率的。@EliKorvigo如果你有一个具有不同属性的替代解决方案,请随意发布它!:)@是的。OP,索引查询是O(1)的结尾和中间的O(n/2)。然而,对于50德克的长度,我不会担心这一点。我们讨论的是在我的系统上2-4纳秒(5-10%)的差异。我已经指出了这一点,因为,当然,50只是一个例子。关于替代数据结构,OP可能考虑固定大小的二进制最小堆。推送和弹出将花费O(log(n)),但随机访问也会如此。换句话说,这一切归结为OP的用例。这看起来像我需要的:)谢谢!我打算推荐同样的东西,这就是为什么我问OP关于访问时间复杂性的原因。我相信,你应该大发雷霆,索引队列是没有效率的。@EliKorvigo如果你有一个具有不同属性的替代解决方案,请随意发布它!:)@是的。OP,索引查询是O(1)的结尾和中间的O(n/2)。然而,对于50德克的长度,我不会担心这一点。我们讨论的是在我的系统上2-4纳秒(5-10%)的差异。我已经指出了这一点,因为,当然,50只是一个例子。关于替代数据结构,OP可能考虑固定大小的二进制最小堆。推送和弹出将花费O(log(n)),但随机访问也会如此。换句话说,这一切归结为OP的用例。