このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】内包表記と条件式

内包表記と条件式

 内包表記は、リストや集合、辞書などのデータ構造を非常にコンパクトに作成できるPythonの強力な機能です。さらに、条件式(三項演算子)を組み合わせることで、要素を追加する際に条件に応じて値を切り替えることが可能になります。これにより、データのフィルタリングやラベリングがシンプルな1行のコードで実現でき、プログラムが読みやすくなります。ここでは、内包表記と条件式の基本構文とその応用例として、温度を分類するプログラムを例に解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.内包表記と条件式の基本

1.1. 内包表記の基本構文

内包表記は、以下のような基本構文で記述されます。

[式 for 変数 in イテラブル]

 この構文では、イテラブルなオブジェクトから要素を取り出し、指定した式を評価した結果を新たなリストに格納します。

1.2. 条件式(三項演算子)の基本構文

 条件式は、ある条件がTrueの場合とFalseの場合で返す値を切り替えるために使用します。基本構文は次の通りです。

値1 if 条件 else 値2

これにより、条件がTrueなら値1が、Falseなら値2が返されます。

1.3. 内包表記と条件式の組み合わせ

 内包表記に条件式を組み合わせることで、各要素を生成する際に条件に応じた値をリストに格納できます。以下の表は、内包表記と条件式の各部分の役割をまとめたものです。

部分説明
リストに格納する値を計算する式
for 変数 in イテラブルイテラブルから各要素を取り出し、変数に代入するループ
if 条件条件がTrueの場合にのみ、式の評価結果をリストに追加する。

2.内包表記と条件式の応用例:温度分類プログラム

ここでは、0℃から40℃まで5℃刻みの温度に対して、以下のルールで温度を分類する例を示します。

 • 10℃未満なら「Cold」
 • 10℃以上かつ30℃未満なら「Comfortable」
 • 30℃以上なら「Hot」

2.1. 条件式を使った温度分類の内包表記

内包表記と条件式を組み合わせると、次のように1行で温度分類リストを作成できます。

# 0℃から40℃まで5℃刻みの温度を分類するリストを作成
temperature_labels = [
    "Cold" if temp < 10 else ("Comfortable" if temp < 30 else "Hot")
    for temp in range(0, 41, 5)
]
print(temperature_labels)

実行結果

['Cold', 'Cold', 'Comfortable', 'Comfortable', 'Comfortable', 'Comfortable', 'Hot', 'Hot', 'Hot']

解説

  • range(0, 41, 5) により、0, 5, 10, ..., 40の温度が生成され、各温度が変数 temp に代入されます。
  • 条件式 "Cold" if temp < 10 else ("Comfortable" if temp < 30 else "Hot") は、
      • temp が10未満なら "Cold"
      • 10以上30未満なら "Comfortable"
      • 30以上なら "Hot"
     と判断し、それぞれの文字列を返します。
  • その結果、例えば出力は
      ['Cold', 'Cold', 'Comfortable', 'Comfortable', 'Hot', 'Hot', 'Hot', 'Hot', 'Hot']
     となります(0℃と5℃は"Cold"、10℃と15℃は"Comfortable"、20℃以降は"Hot")。

2.2. 応用:数値リストの条件付き変換

別の例として、1から20までの整数について、条件に応じて以下のラベルを付ける例を示します。

 • 3の倍数なら "Tri"
 • 4の倍数なら "Quad"
 • それ以外なら元の数値をそのまま使用

number_labels = [
    "Tri" if x % 3 == 0 else ("Quad" if x % 4 == 0 else x)
    for x in range(1, 21)
]
print(number_labels)

実行結果

[1, 2, 'Tri', 'Quad', 5, 'Tri', 7, 'Quad', 'Tri', 10, 11, 'Tri', 13, 14, 'Tri', 'Quad', 17, 'Tri', 19, 'Quad']

解説

  • range(1, 21) により、1から20までの整数が生成され、各整数が変数 x に代入されます。
  • 条件式 "Tri" if x % 3 == 0 else ("Quad" if x % 4 == 0 else x) は、
      • 3で割り切れる場合は "Tri" を返し、
      • そうでなく4で割り切れる場合は "Quad" を返し、
      • どちらにも当てはまらなければ、元の整数 x を返します。
  • 結果として、例えば出力は
      [1, 2, 'Tri', 'Quad', 5, 'Tri', 7, 'Quad', 'Tri', 10, 11, 'Tri', 13, 'Quad', 15, 'Tri', 17, 'Quad', 19, 'Tri']
     となります。

まとめ

 内包表記と条件式を組み合わせることで、従来の複雑なループやif文を使ったデータ加工処理を、シンプルかつ読みやすい1行のコードで実現できます。

  • 基本構文は [式 for 変数 in イテラブル if 条件式] ですが、条件式自体に三項演算子を組み込むことで、より柔軟に値を切り替えられます。
  • 応用例では、温度分類や数値ラベリングなど、具体的な条件に応じた変換を行い、データのフィルタリングと変換を効率的に行う方法を示しました。

これらの技法を活用することで、プログラムの記述が短くなり、保守性と可読性が向上します。