読者です 読者をやめる 読者になる 読者になる

HYT Machineworks 作業日誌

やったこととか思いついたことをメモしておくブログです。

リストで順序を維持したまま重複を削除する(Python3)

Python PyCharm Pythonistaへの道

Pythonでリストを維持したまま重複を削除する方法でよく下のような方法をします。

a = ["b", "c", "a", "f", "c", "d"]
b = sorted(set(a), key=a.index)
print(b)

>>>> ['b', 'c', 'a', 'f', 'd']

ただ、これでいいと思っていたんですが、最近UpgradeしたPyCharmCommunityEdition2017.1だとkey=a.indexのところにエラーというか警告が出る。その対策法を考えたのでメモ

 で、その警告

Expected type 'Optional[(str) -> Any]' (matched generic type 'Optional[(TypeVar('_T')) -> Any]'), got '(self: list, object: TypeVar('_T'), start: int, stop: Optional[int]) -> int' instead less... (Ctrl+F1)
This inspection detects type errors in function call expressions. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Types of function parameters can be specified in docstrings or in Python 3 function annotation.

なにいってんのかわかんねーけど、indexの引数がおかしいって言われてると思って直してみた

a = ["b", "c", "a", "f", "c", "d"]
b = sorted(set(a), key=lambda x: a.index(x))
print(b)

>>>>['b', 'c', 'a', 'f', 'd']

lamda式を使って回避した。ただ回避しただけなのかも。。。

2017/3/31追記

一晩寝たら、

 Explicit is better than implicit.

ってことか?なんとなくそう思った。