2016-06-11 9 views
2

私は効率を改善するためにdelitemメソッド本体を固定する最良の方法を知りたいと思います。ループを終了しないエラーが発生します。__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] 
+0

を呼び出すことにより、無限にしばしば__delitem__を呼びたい[IDX] '' *。そのメソッドの中で、あなたは 'del self [len(self)-1]'を呼び出します。再帰は避けられないようです。 – jonrsharpe

+0

リンクされたリスト内の項目を削除するには、削除されたノードの前後にあるノード内の参照をリダイレクトする必要があります。参照カウントが0に落ちるので、 'del'を呼び出す必要はありません。 – cdarke

答えて

2

私はあなたが私の知る限り、この要素はどこにも参照すべきではありませんので、ガベージコレクタにこれを任せることができるはずライン

del self[self.length-1] 

を削除するにはお勧めします。その後、自動的に削除されます。あなたが実際にドキュメント文字列、 `__delitem__`法*」を実装`デル自己に注意したよう

そうでない場合、あなたは(あなたがすでに経験した)selfdel

+0

私はこの行を削除した後もまだこのテストケースを実行していますが、1!= 20というエラーが表示されますが、どこから来ているのか分かりません –

+0

これは別の問題だと思います。あなたのテストコードで – DomTomCat

関連する問題