たまたま、基本的なフィルタリングの必要性があることに気づきました。リストがあり、アイテムの属性でフィルタリングする必要があります。
私のコードは次のようになりました:
my_list = [x for x in my_list if x.attribute == value]
でも、こんなふうに書いた方がいいのではないかと思いました。
my_list = filter(lambda x: x.attribute == value, my_list)
より読みやすく、パフォーマンスに必要な場合はラムダを取り出して何かを取得できます。
質問です:2番目の方法を使用する際に注意点はありますか?パフォーマンスの違いはありますか?Pythonic Way™がまったくないので、さらに別の方法で実行する必要がありますか(ラムダの代わりにitemgetterを使用するなど)?
filter
リストではなくフィルタージェネレーターオブジェクトが返されることに注意してください。
filter
もっと読みやすいと思う人はもっと多いと思います。listcompでそのまま使用できる単純な式があるが、に渡すためにラムダでラップする必要がある場合(または、同様にから、partial
またはoperator
関数などで構成する必要がある場合)はfilter
、listcompsが勝つときです。