Pythonにおいて、map/filter等の高階関数とリスト内包表記はどちらもできることはほぼ同じに感じるのですがどのように使い分ければよいのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
よりPythonic(Python的)なのは、リスト内包表記とされています。高階関数はあまり好まれません。
例えば書籍"Effective Python"(日本語版)でも「Item 7: Use List Comprehensions Instead of map and filter/項目7:mapやfilterの代わりにリスト内包表記を使う」とされています。
投稿2016/08/12 09:28
編集2016/08/12 10:47総合スコア6191
0
ベストアンサー
他の皆さんのおっしゃるとおりで、Pythonらしいコード、つまり推奨されるのは内包表記の方ですね。
ちなみに私は内包表記が大好きです。(^-^)
filter
やmap
は、直接for文でイテレートする場合には内包表記よりも簡潔に書けることがありますが、イテレーターでなく直接リストを得たいときには内包表記の方が簡潔ですね。(短いとは言っていない)
lang
1>>> a = [1, 2, 3] 2>>> [str(x) for x in a] 3['1', '2', '3'] 4>>> map(str, a) 5<map object at 0x0000000002BF00B8> 6>>> list(map(str, a)) 7['1', '2', '3'] 8>>> for x in map(str, a): 9... print(x, end="") 10... 11123>>>
内包表記をfor文の代わりに使うとき、評価式が複雑になると書きにくくなるので、関数を定義してそれを使うようにすればスッキリします。
lang
1>>> def f(x): 2... print(x, end="") 3... 4>>> [f(x) for x in a] 5123[None, None, None] 6>>>
書き方によっては、内包表記の方がfor文よりも速度面でも有利だとのことです。
pythonの内包表記を少し詳しく - Qiita
http://qiita.com/y__sama/items/a2c458de97c4aa5a98e7
投稿2016/08/12 11:40
総合スコア9396
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。