2011-11-08 13 views
0

我試圖從排序列表中刪除一個項目。如果該項目不在列表中,則列表保持不變。如果該項目多次出現,則僅刪除該項目的一處。再一次,我不允許使用內置列表函數,但目前,我只是想讓代碼正常工作!面向對象編程刪除重複的項目(Python)

class SortedList: 
    def __init__(self): 
     self.s_list = [] 
    def insert(self, item): 
     self.s_list.append(item) 

    def remove(self, item): 
     finalSet=[] 
     for item in self.s_list: 
      if item not in finalSet: 
       finalSet.append(item) 
       return finalSet 
    def __str__(self): 
     return str(self.s_list) 
+0

可能的重複[你如何從Python中的列表中刪除重複?](http://stackoverflow.com/questions/479897/how-do-you-remove-duplicates-from-a-list- in-python) – dcrosta

+0

縮進你的return語句兩個級別,你的代碼應該工作。 –

+0

: - /仍然不會刪除任何東西 –

回答

2

你刪除功能似乎很困惑。

def remove(self, item): 
    finalSet=[] 
    for item in self.s_list: 
     if item not in finalSet: 
      finalSet.append(item) 
      return finalSet 
  1. 你爲什麼要創建一個新的列表,你不應該被修改現有的名單?
  2. 函數中有兩種不同的item。一個是函數的參數,另一個是循環。循環中的一個替換參數。給他們不同的名字
  3. 你幾乎馬上返回列表,你可能不希望返回,直到循環完成。你的回覆聲明太過於複雜了
  4. 由於你給兩個不同的變量賦予了相同的名稱,所以我無法猜測你在循環中實際做了什麼。
+0

除了del函數之外,還有另一種方法可以從列表中刪除重複項而不創建另一個列表並將元素添加到新列表中?你對變量是正確的。我在循環內用變量'x'替換了項目 –

+0

在循環中試圖做的事情非常多,對於列表中的每個項目,如果項目不在空列表中,則將它附加到空列表 –

+0

@WillS,有各種列表方法可以刪除元素。但是你似乎受限於你可以使用的東西。 del是我知道的唯一非方法。 –

1
+0

我認爲如果'output'是一個集合,1)它會更快2)它總是被排序 – st0le

+1

'集合'沒有排序,它們的迭代次序是undefined :http://docs.python.org/library/stdtypes.html#set-types-set-frozenset。他們確實有財產,他們不包含重複。 – dcrosta

+1

雖然我有什麼問題?爲什麼它沒有做我想要做的事情? –