2010-11-19 8 views
4

重複したエントリをジェネレータに追加しないようにする方法と、ジェネレータを削除する方法はありますか?pythonジェネレータの複製

私は別のものを使用する必要がある場合は、アドバイスをお願いします。

+2

いくつかのコードを表示してください...私たちはあなたのジェネレータが何をすべきか知りません。 – ThiefMaster

答えて

9

値がハッシュ可能な場合は、重複を削除する最も簡単な、非常識な方法はsetを使用することです:

values = mygenerator() 
unique_values = set(values) 

しかし、気を付ける:セットは値がもとあったどのような順序覚えていませんこれはシーケンスをスクランブルします。

以下の機能は、目的に応じてsetより優れている可能性があります。これは、順不同で他の値のいずれかを得ることなく、重複を除外し:1つの引数、ハッシュ可能な値の任意の反復可能と

def nub(it): 
    seen = set() 
    for x in it: 
     if x not in seen: 
      yield x 
      seen.add(x) 

コールnubを。同じ項目をすべて生成するが、重複を削除したイテレータを返します。

+0

+1、素敵なデコレータ – fmark

3

itertools.groupby()あなたが少しの作業をしたい場合は、隣接する複製を折りたたむことができます。

print [x[0] for x in itertools.groupby([1, 2, 2, 3])] 
+0

入力はソートする必要がありますが、それでも非常に良いです! – Ale

関連する問題