Python 如何实现delitem方法?
我想知道修复delitem方法体以提高效率的最佳方法,我得到了一个不会退出循环的错误Python 如何实现delitem方法?,python,performance,doubly-linked-list,Python,Performance,Doubly Linked List,我想知道修复delitem方法体以提高效率的最佳方法,我得到了一个不会退出循环的错误 def __delitem__(self, idx): """Implements `del self[idx]`""" nidx = self._normalize_idx(idx) currNode = self.head.next if nidx >= len(self): raise IndexErro
def __delitem__(self, idx):
"""Implements `del self[idx]`"""
nidx = self._normalize_idx(idx)
currNode = self.head.next
if nidx >= len(self):
raise IndexError
for i in range(nidx+1, len(self)):
self[i-1] = self[i]
del self[len(self)-1]
我建议把这条线拆下来
del self[self.length-1]
您应该能够让垃圾收集器来处理这个问题,因为据我所知,这个元素不应该被引用到其他任何地方。然后它会被自动删除
否则,您将通过调用
self
(您已经体验过)上的del
无限频繁地调用\uuu delitem\uuu
,正如您在docstring中实际注意到的那样,\uu delitem\uu
方法“实现del self[idx]
”。在该方法中,您调用del self[len(self)-1]
。递归似乎是不可避免的。删除链表中的项目涉及重定向已删除节点之前和旁边的节点中的引用。您不需要调用del
,因为引用计数应该降到零。如果删除行后仍运行此测试用例,则会出现错误,显示为1!=然而,我不确定这20是从哪里来的,我认为这是一个不同的问题,至少它来自测试代码中稍后的一些代码