メモ
- [Python-ml-jp 4518] Re: 順序を保ったまま重複を取り除きたい (http://www.python.jp/pipermail/python-ml-jp/2008-September/004515.html)
ifilterを使用した方法iuniq2を実装した。ifilterを使用した方法iuniq2とmlに載っている方法iuniqの時間を比較してみたが、テスト条件を色々変えてみてもiuniq2の方が遅かった。uniq1とiuniqはテスト条件によりどちらが速いかが変わるらしい。
def iuniq(seq): yielded = set() for item in seq: if item not in yielded: yield item yielded.add(item) def iuniq2(seq): g = iter(seq) while True: v = g.next() yield v g = ifilter(lambda x, v=v: x!=v, g) def uniq1(ls): return sorted(set(ls), key=ls.index)