リストから重複要素を削除する

Pythonでリストから重複要素を削除する方法をメモ.


1度,集合型にして重複要素を削除.
その後リスト型に戻す.

# coding: utf-8

ls = [2,0,0,8,"Apple",0,3,"Bart",2,3,"Apple"]

print list(set(ls))

実行結果:

bash-3.2$ python listtest.py
python listtest.py
[0, 2, 3, 'Apple', 8, 'Bart']

コレだと,結果が一意に定まってしまい,要素の順序が保存されない.


重複した要素を削除して,要素の出現順のに並んだリストを手に入れるには↓.

# coding: utf-8

ls = [2,0,0,8,"Apple",0,3,"Bart",2,3,"Apple"]

output = []
for i in ls:
    if not i in output:
        output.append(i)

print output

実行結果:

bash-3.2$ python listtest.py
python listtest.py
[2, 0, 8, 'Apple', 3, 'Bart']


もっとイイ書き方ないかな?



追記(2008Mar26):
morchinさんからもっとイイ書き方のコメントを頂きました.

どうやら,組み込み関数sortedには,key引数に要素のキーを取得する関数を指定できるみたいです.
すると,↓で記述できます.

sorted(set(ls), key=ls.index)

コレはとってもキレイ!!