質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

3336閲覧

Python map/filterとリスト内包表記の使い分け

pipopa

総合スコア12

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/08/12 09:24

Pythonにおいて、map/filter等の高階関数とリスト内包表記はどちらもできることはほぼ同じに感じるのですがどのように使い分ければよいのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
yohhoy

総合スコア6189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

他の皆さんのおっしゃるとおりで、Pythonらしいコード、つまり推奨されるのは内包表記の方ですね。
ちなみに私は内包表記が大好きです。(^-^)

filtermapは、直接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

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pipopa

2016/08/12 12:22

回答有り難うございます。 推奨されている上に速度面でも有利ということなら使わない手はないですね。(^^)
guest

0

Pythonは何でもfor文のイメージですねぇ。
なんせfor文が強力ですもんね。
map や filter はPythonを使う人たちは使わないんじゃないでしょうか。

投稿2016/08/12 10:41

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問