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

pythonのfilter関数

python

pythonのビルトイン関数にfilterというのがある。これはリストに対して条件に合致する要素をとってくることができる。よくネットで見るのは、

>>> lis=["apple","grape","banana","apple pie"]
>>> filter(lambda x:x=="apple",lis)
['apple']

ところが、pythonのバージョンによってはどうやらオブジェクトで返ってくる場合があるようである。

>>> lis=["apple","grape","banana","apple pie"]
>>> filter(lambda x:x=="apple",lis)
<filter object at 0x7fd0dd679860>

>>> list(filter(lambda x:x=="apple",lis))
['apple']

少し試してみた感じ、たぶん上がpython2で下がpython3?
思わぬところで注意が必要なようだ。

そもそも、filter関数を使わずに

>>> lis=["apple","grape","banana","apple pie"]
>>> [word for word in lis if word=="apple"]
['apple']

とした方が、文字列の部分一致だとかリストのindex返したりだとか色々応用が利きそうな気もする。