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

【Python入門】内包表記とif

内包表記とif

 内包表記は、従来のforループやappendメソッドを使ってリストを作成する処理を、短く直感的な1行の記述で実現できる強力な機能です。さらに、if節を組み合わせることで、条件に合致した要素だけをリストに抽出することが可能となります。これにより、コードの可読性が向上し、意図したデータだけを簡潔に生成できるようになります。

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

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

1.内包表記とifの基本

1.1. 内包表記の概要

内包表記の基本構文は以下の通りです。

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

 この構文では、イテラブルなオブジェクトから要素を1つずつ取り出し、指定した式を評価した結果を新しいリストとして作成します。

1.2. if節を付加する意味と構文

 内包表記にif節を追加すると、条件を満たす場合にのみ式の評価結果をリストに追加できます。基本構文は次のようになります。

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

 このように記述することで、条件式がTrueとなる要素だけがリストに含まれるため、不要なデータを自動的に排除できます。

以下の表は、if節付き内包表記でよく使われる条件式の例を示しています。

条件式意味
len(item) >= 5文字列itemの長さが5以上である。
item.startswith("a")文字列itemが"a"で始まる。

2.内包表記とifを用いた実践例

2.1. フルーツリストから長い単語だけを抽出する例

 ここでは、あるフルーツ名のリストから、文字数が5文字以上のフルーツのみを抽出して表示する例を示します。例えば、以下のようなフルーツリストが与えられたとします。

fruits = ["apple", "kiwi", "banana", "fig", "mango", "peach"]

内包表記とif節を使って、文字数が5文字以上のフルーツだけを取り出すプログラムは次の通りです。

# フルーツリストから、名前の長さが5以上のフルーツだけを抽出
long_fruits = [fruit for fruit in fruits if len(fruit) >= 5]
print(long_fruits)

実行結果

['apple', 'banana', 'mango', 'peach']

解説

  • 内包表記 [fruit for fruit in fruits if len(fruit) >= 5] では、リスト fruits から各要素を取り出し、変数 fruit に代入します。
  • if節 if len(fruit) >= 5 により、fruit の文字数が5以上の場合にのみ、fruit が新しいリスト long_fruits に追加されます。
  • 結果として、"apple"(5文字)、"banana"(6文字)、"mango"(5文字)、"peach"(5文字)が抽出され、出力は ['apple', 'banana', 'mango', 'peach'] となります。

2.2. 数値のフィルタリングによる例

 別の例として、1から20までの整数のうち、2の倍数でもなく、3の倍数でもない値だけを抽出する場合、if節を使って以下のように記述できます。

# 1から20までの整数の中から、2の倍数でもなく、3の倍数でもない値だけを抽出
filtered_numbers = [x for x in range(1, 21) if x % 2 != 0 and x % 3 != 0]
print(filtered_numbers)

実行結果

[1, 5, 7, 11, 13, 17, 19]

解説

  • range(1, 21) により1から20までの整数が生成され、各値が変数 x に代入されます。
  • if節 if x % 2 != 0 and x % 3 != 0 は、xが2で割った余りが0でなく、かつ3で割った余りも0でない場合にTrueとなります。
  • これにより、条件を満たす整数のみがリスト filtered_numbers に追加され、出力例は [1, 5, 7, 11, 13, 17, 19] となります。

まとめ

 内包表記とif節を組み合わせることで、条件を満たす要素のみを効率よくリストに格納することができます。

  • 基本構文は [式 for 変数 in イテラブル if 条件式] であり、条件式がTrueの場合にのみ式が評価されます。
  • このテクニックは、数値のフィルタリングや文字列データの抽出など、さまざまな場面で役立ちます。

これらを活用することで、コードが短く読みやすくなり、プログラムの開発効率も向上します。