michisu's tumblelog RSS

Archive

Apr
10th
Thu
permalink

which コマンドの実装

id:t2y-1979:20080409#1207749772

whichはPATHを頭から調べて最初に見つけたものを返すので、

  • 順序を保持しないsetに入れるとまずい
  • ループをbreakしないと最後に見つけたものを出力してしまう

と思います。

>>> set(['a', 'b', 'c', 'd'])
set(['a', 'c', 'b', 'd'])

順序が変わってます。

重複を排除するには、リストにuniqのようなメソッドがあればいいけど、ないみたいです。

こんな書き方ができました。ただ、遅いかも。

>>> l = ['a', 'b', 'b', 'c', 'a']
>>> [ x for i, x in enumerate(l) if x not in l[:i] ]
['a', 'b', 'c']

でも、頭から調べてbreakする処理なら、重複を排除しておく必要はないわけですが。

自分なりに書いたのが以下。