Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

for文とリスト内包表記のどちらを使うのが良いですか?

f:id:kenken0326:20200326174644p:plain

こんにちはPyQサポートです。今回は、「for文と内包表記のどちらを使うべきか」を紹介します。

内包表記とは


[要素の式 for 変数 in イテラブル] のような記述をリスト内包表記といいます。
内包表記を使うと、1行でリストを作成できて便利です。

イテラブル

イテラブルとは、繰り返しに使えるオブジェクトです。list, dict, set, strクラスのオブジェクトはイテラブルです。

変数itrがイテラブルのときの特徴

for i in itrなどのようにforで使えます。②list(itr)などイテラブルを必要とする関数で使えます。

いただいた質問

実際の業務では、以下のプログラムのように内包表記を使わず行が長くなるよりかは、内包表記を使ってシンプルな書き方をする方が推奨されることが多いのでしょうか? 慣れていないせいか、リスト内包表記を使った書き方は私には読みにくいです。

内包表記を使わないプログラム

loglist = []
for s in log.splitlines():
    loglist.append(s.split())

loglist2 = []
for it in loglist:
    if '晴れ' in it:
        loglist2.append(it)

内包表記を使ったプログラム

内包表記を使ったプログラム
loglist = [s.split() for s in log.splitlines()]
loglist2 = [it for it in loglist if '晴れ' in it]

回答

今回の例ではforループで書いても、リスト内包表記で書いてもどちらでも良いコードの内容に思えます。 ですが、リスト内包表記が読みにくいなと感じる場合、forループで書いても問題ありません。
チームで開発する場合は、どちらの書き方のほうが良いかチーム内で相談すると良いでしょう。

for文を使うかリスト内包表記を使うかの判断も大切ですが、処理の内容が理解しやすく再利用しやすい単位で関数分割などを進めることのほうが重要です。

一般的には、慣れれば内包表記の方が記述が少ないので、読みやすいことが多いと思います。
しかし、複雑な内包表記は逆に読みにくいので、その場合はfor文の方が良いでしょう。 たとえば2重のリストや、辞書のリストを作成するために2重の内包表記を書くなどは避けましょう。

また速度についての違いも、無理に意識する必要はありません。 速度の問題でfor文かリスト内包表記かを考えるよりも、他に高速化できるポイントは必ずあるはずだからです (たとえば処理をpandasやNumpyで行うべき場合や、その他の入出力処理が遅い場合など)。

Copyright ©2017-2020 BeProud Inc. All rights reserved.