Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何实现delitem方法?_Python_Performance_Doubly Linked List - Fatal编程技术网

Python 如何实现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

我想知道修复delitem方法体以提高效率的最佳方法,我得到了一个不会退出循环的错误

    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是从哪里来的,我认为这是一个不同的问题,至少它来自测试代码中稍后的一些代码