2011-01-20 7 views
7

私は文字列のリストを含むクラスを持っています。言う:リストに一意の要素が含まれていることを確認するにはどうすればよいですか?

ClassName: 
- list_of_strings 

この文字列のリストには一意の要素が含まれている必要があります。残念ながら、このlist_of_stringsを、セットのような別のタイプに変更することはできません。

addToList(str_to_add)の機能では、文字列の一意性を保証したいと思います。どうすればこれを最もうまくできますか?リストに追加する文字列を追加し、セットに変換してからリストに戻し、それをオブジェクトに再割り当てすることは現実的でしょうか?

def addToList(self, str_to_add): 
    self.list_of_strings.append(str_to_add) 

ありがとう:

ここで私は更新する必要がある方法です!

+0

*なぜ*あなたはセットを使用できませんか?ここには適切なデータ型があるようです。 –

+0

リストをソート順に並べることはできますか?そうであれば、バイナリ検索を使用できます。そうでなければ、あなたは線形順序アルゴリズムに悩まされているので、絶対速度が必要条件でないならば、集合への変換はちょうど最も簡単なことかもしれません。 – chrisaycock

+0

彼はおそらく、注文を保存したいと思うか、またはセットではなく注文リストを期待するコードがすでに存在しています。順序付き集合または一意のリストは合理的なデータ型です。 – bnaul

答えて

21
def addToList(self, str_to_add): 
    if str_to_add not in self.list_of_strings: 
     self.list_of_strings.append(str_to_add) 
+0

ああ...あなたが正しいとこれは私が記述した問題のために正しいです。 Embarassingly、私はちょうど私が私の問題を間違って記述し、私が持っている問題は全く異なっていることに気づいた。 – Cuga

1

あなたは確かにあなたが説明したリストツーセットツーリストの操作を行うことができますが、あなたはまた、要素がそれを追加する前に、リストにすでに存在するかどうかを確認するin演算子を使用することができます。

4

リスト内の文字列がinであることを確認するか、チェックして追加できる並行してsetを使用してください。

+0

パラレルセットは興味深いアイデアです。 – kindall

+0

これはおそらく、特にリストが大きい場合は、ルックアップの点でより効率的です。 – ffledgling

0

これを実行する1つの方法は、ハッシュセットを作成してリストを反復し、要素をセットに追加することです。重複を除去するために2回目の反復を使用することができます。デフ

addToList(自己を、str_to_add):

0

おそらく、我々は次のように行うことができます

try: 
    self.list_of_strings.index(str_to_add) 
except: 
    self.list_of_strings.append(str_to_add) 

まあ、私はそれがまだの場合/他のと同じ仕組みだかどうかわかりません。

関連する問題