Python/Cython/Numpy高效地维护具有最大长度的列表
我需要一些技巧或解决方案,告诉我如何将对象列表(dicts或通过Cython定制的Python类型)有效地限制在最大长度 基本上,这样做需要花费太多的时间: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模块具有或“双端队列”,可以在数组的开头或结尾对其进行有效操作。你可以把一个最大
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的用例。