【发布时间】:2017-11-19 04:17:08
【问题描述】:
是否可以限制保存在链表中的节点?
为简单起见,举以下例子:
import numpy as np
class LinkedList():
def __init__(self,data,prev):
self.data = data
self.prev = prev
myData_prev = None
for x in range(10):
data = np.random.random((3,2))
myData = LinkedList(data,myData_prev)
myData_prev = myData
print(myData.data)
print(myData.prev.data)
print(myData.prev.prev.data)
print(myData.prev.prev.prev.data) ## DELETED OR NO LONGER AVAILABLE
假装“数据”非常大或范围不确定。是否可以限制保存在内存中的节点?为简单起见,假设我只需要最新的 3 个节点或 30%。
我想我有 2 个问题。首先,上面的问题怎么做,维护链表的方式。其次,有没有更好的方法不使用链表。我想我可以使用有限制的队列/双端队列或 heapq,但是获取与另一个相关的数据会有点困难,对吧?
【问题讨论】:
-
你的问题不清楚:如果你想限制列表中的节点数 - 当然你可以做到,这取决于你想如何实现它:如果它是“满的”,您可以忽略“添加”新节点的请求,删除最旧的节点等。如果您想控制内存中的内容以及不存在的内容,那么 AFAIK 在 Python 中是不可行的,但即使如果会的话 - 这没有任何意义。如果您想在较低级别上工作 - 使用较低级别的语言。你有真正的理由提出这样的要求吗?
-
您是否对应用程序进行了基准测试,测量了正在使用的内存并发现 this 是一个瓶颈?
-
链表不是一个很好的数据结构。这是可行的,但您可能正在寻找
deque。 -
我如何从链表中“删除”最旧的?我没有进行基准测试,但我可以看到运行程序时使用的内存高达 4GB。它适用于我正在尝试实现机器学习的编程游戏。没有必要保留很久以前的非常旧的输入数据,这就是为什么我想限制保留的节点。它没有必要,它仍然有效,只是想知道它是否可能。
标签: python linked-list queue heap