ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

Python filter関数を拡張してみた

Pythonにはfilterという関数があって、あるリストから結果がTrueになる値だけを抜き出すのによく使ってます。
例えばこんな感じ。

>>> L = [1,2,3,4,5]
>>> morethanthreeList = filter(lambda x: x>3, L)
>>> print morethanthreeList
[4,5]

これはとても便利なんですけど、Trueの結果が得られるなら、同時にFalseの結果も得たいと思うときが僕にはあります。

なんかそんな関数、既にありそうですけど、自作してみました。

>>> def exfilter(cond, list):
...     t=filter(lambda x:cond(x), list)
...     f=filter(lambda x:not cond(x), list)
...     return t,f

>>> L = [1,2,3,4,5]
>>> trueList,falseList = exfilter(lambda x: x>3, L)
>>> print trueList
[4,5]
>>> print falseList
[1,2,3]

全然テストしてないので、あらゆるケースで上手くいくかはよく分かりませんが。。
Python的な書き方として正しいのかもよくわかんないです。

ツッコミお願いします!