2011-11-08 9 views
0

ソートされたリストから項目を削除しようとしています。アイテムがリストにない場合、リストは変更されません。アイテムが複数回出現する場合は、そのアイテムが1回だけ削除されます。繰り返しますが、ビルドインリスト関数を使用することはできませんが、当面はちょうどコードを稼働させようとしています!オブジェクト指向プログラミング繰り返し項目を削除する(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ステートメントを2つのレベルに任せると、コードが機能するはずです。 –

+0

: - まだ何も削除していません –

答えて

2

あなたのremove関数は非常に混乱しているようです。

def remove(self, item): 
    finalSet=[] 
    for item in self.s_list: 
     if item not in finalSet: 
      finalSet.append(item) 
      return finalSet 
  1. なぜあなたは、新しいリストを作成しているあなたは、既存のリストを変更すべきではありませんか?
  2. この機能には2種類の異なるitemがあります。 1つは関数のパラメータであり、もう1つはループ内のパラメータです。ループ内のパラメータがパラメータを置き換えます。別の名前を付けてください
  3. リストがすぐに返ってきたら、ループが完了するまで戻ってこないようにしてください。あなたのreturnステートメントはあまりにも遠くに意図されています
  4. 同じ名前を与えて2つの異なる変数を混同しているので、実際にループ内で何をしようとしているのか推測できません。
+0

さらに、del関数よりも、別のリストを作成せずにリストから重複を削除し、その要素を新しいリストに追加する別の方法がありますか?あなたは変数について正しいです。ループ内のアイテムを変数 'x'に置き換えました –

+0

ループ内で何をしようとしていたのかというと、リスト内の各アイテムについて、そのアイテムが既に空のリストにない場合は、そのアイテムを空に追加しますリスト –

+0

@ WillSには、要素を削除するさまざまなリストメソッドがあります。しかし、あなたはあなたが使用できるものに制限されているようです。 delは私が知っている唯一の非メソッドです。 –

1
+0

私は 'output'がセットだったと思いますが、それは速くなるでしょう2)いつもソートされます – st0le

+1

' set'はソートされておらず、その反復順序は未定義です:http://docs.python.org/library/stdtypes.html#set-types-set-frozenset。彼らは重複を含んでいないという性質を持っています。 – dcrosta

+1

私は何が間違っていますか?なぜ私はそれをやろうとしているのですか? –

関連する問題