メモ


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)