本記事では、Pythonの繰り返し処理の内包表記を紹介します。
こんな人におすすめ
- 内包表現とは何か知りたい
- 繰り返し処理で条件分岐を組み合わせたい
- 内包表現で取り出した要素に関数を適用したい
主なライブラリ
なし。
本ページで使用するライブラリをインポートするときは以下のコードを使用します。
import time import matplotlib.pyplot as plt import numpy as np
内包表現とは
内包表現とは、for文を使った繰り返し処理を1行で記載する方法となります。
# 内包表現で配列を使った繰り返し処理 print([i for i in list1]) # [1, 2, 3] # 内包表現でrangeを使った繰り返し処理 print([i for i in range(3)]) # [0, 1, 2]
内包表現のメリット、デメリット
内包表現を使うことで、処理速度が上がるメリットがあります。
一方で、内包表現を使うことで可読性が下がる(読みづらくなる)デメリットがあります。
条件付き内包表現(if)
内包表現で記載した繰り返し処理は、条件分岐を適用することも可能です。
以下の内包表現のコードでは、「if i % 2 == 0」で偶数の数字だけ取り出す用フィルタリングをしています。
# 偶数のものだけ取り出す print([i for i in range(3) if i % 2 == 0]) # [0, 2]
条件付き内包表現(if else)
また、内包表現では、以下のようにコードを記載することで、if else形式で条件分岐させることも可能です。
# 偶数のときはそのまま、奇数の時はaを返す print([i if i % 2 == 0 else 'a' for i in range(5)]) # ⇒ [0, 'a', 2, 'a', 4]
条件付き内包表現(複数条件)
内包表現の条件分岐は複数の条件を設定することができます。
複数条件を設定する場合は、通常の条件分岐と同様、AND条件とOR条件を設定します。
# AND条件 print([i if i % 2 == 0 and i >= 3 else 'a' for i in range(5)]) # ['a', 'a', 'a', 'a', 4] # OR条件 print([i if i < 1 or i >= 3 else 'a' for i in range(5)]) # [0, 'a', 'a', 3, 4]
内包表現で取り出した要素に関数を適用する
以下のようにコードを記載することで、取り出した要素に、関数を適用するなどの処理を行うことができます。
# 取り出した要素を倍にする print([i * 2 for i in range(5)]) # [0, 2, 4, 6, 8] # 取り出した要素を四捨五入する print([round(i, 1) for i in [1.23, 2.34, 3.45]]) # [1.2, 2.3, 3.5]
内包表現の処理速度
内包表現のメリットとして、通常処理と比べて処理速度が速いことを紹介しました。
以下のような処理を作成し、実際に処理速度を計測しました。
# 通常の繰り返し処理 list1 = [] for i in range(100000): list1.append(i) # 内包表現の繰り返し処理 list1 = [i for i in range(100000)]
処理速度の平均値を計測した結果は以下の通りとなります。
通常の繰り返し処理 :0.010(s)
内包表現の繰り返し処理:0.005(s)
通常の処理と比べて、内包表現の処理の方が早いという結果となりました。