2015-11-25 54 views
0

我有下面的自定義類,當它的長度大於5時,它將被截斷。當單步執行代碼時,切片操作會發生,但是當控制權返回給調用者時存儲的topFiveList實例保持長度大於5.我在這裏做錯了什麼?Python自定義列表類 - 切片自我

class topFiveList(list): 
    def add(self, key, value): 
     index = -1 
     for i, pair in enumerate(self): 
      if pair[1] < value: 
       index = i 
       break 
     if index == -1: 
      self.append([key, value]) 
     else: 
      self.insert(index, [key, value]) 
     if len(self) > 5: 
      self = self[:5] 

testvals = [['six', 6], ['one',1], ['five',5], ['nine', 9], ['three',3], ['four', 4], ['seven', 7]] 
topFive = topFiveList() 
for text, value in testvals: 
    topFive.add(text, value) 
+0

'self = self [:5]'不會修改'self'實例。 – vaultah

+0

好的。但爲什麼不呢?以及如何更改自我實例?而且,對於誰低估了這個問題,你能否發表評論讓我知道我可以怎樣改進這個問題? – wesanyer

回答

3

self = self[:5]不修改self情況下,它只是結合局部變量self到創建的切片self[:5]

但是,您可以使用切片分配。

self[:] = self[:5] 

self[5:] = [] 

都達到相同的。

第一個選項用self[:5]代替self的內容。 OTOH第二個選項將簡單地刪除從位置5開始的所有內容。