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的な書き方として正しいのかもよくわかんないです。
ツッコミお願いします!