matobaの備忘録

育児しながら働くあるエンジニアの記録

Pythonのリストから特定条件で抽出する

手元の技術メモをインターネットに出す記事です。 今回は、Pythonのリストから特定条件で抽出する話。

例えば、 .flg という属性がTrueのものだけ取り出す場合

filter(lambda obj: obj.flg, mylist)

結果は、イテレータである。

対話型プロンプトで動かしてみるとこんな感じ。

>>> from dataclasses import dataclass
>>>
>>> @dataclass
... class MyClass:
...     name: str
...     flg: bool
...
>>> mylist = [
...     MyClass(name="mtb", flg=True),
...     MyClass(name="matoba", flg=False),
...     MyClass(name="mtb_beta", flg=True),
... ]
>>> mylist
[MyClass(name='mtb', flg=True), MyClass(name='matoba', flg=False), MyClass(name='mtb_beta', flg=True)]
>>> filter(lambda obj: obj.flg, mylist)
<filter object at 0x1003f3c70>
>>> list(filter(lambda obj: obj.flg, mylist))
[MyClass(name='mtb', flg=True), MyClass(name='mtb_beta', flg=True)]

docs.python.org