Pythonの内包表記について

MQL5リファレンス

Python内包表記は、コードをシンプルかつ効率的に記述するための便利な方法です。特にリスト、辞書、集合の内包表記は、初心者がPythonを学ぶ際に大変役立ちます。このガイドでは、内包表記の基本的な使い方から、実際に役立つサンプルコードを使ってわかりやすく解説していきます。


スポンサーリンク
スポンサーリンク

内包表記とは

内包表記(ないほうひょうき)は、Pythonの文法の一つで、あるデータ構造を生成する際に使います。具体的には、通常は「forループ」などを使って複数行で書く処理を、1行で簡潔に記述できるのが特徴です。


リスト内包表記

リスト内包表記を使うと、リストを生成するコードを短くまとめることができます。基本的な構文は次のとおりです。

# [式 for 変数 in 使いたい値の集まり]

ここで「使いたい値の集まり」とは、順番に繰り返し使える複数のデータのことです。例えば、range(1, 11) は1から10までの数字の集まりを作ります。また、すでに作成したリストなども「使いたい値の集まり」として使用できます。

例:1から10までの数の2乗をリストにする

# 1から10までの数の2乗をリストにまとめる
squares = [x ** 2 for x in range(1, 11)]
print(squares)  # 出力: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • squares はリストです。内包表記を使って生成しています。
  • x ** 2x の2乗を意味します。
  • for x in range(1, 11) は、x が1から10まで順番に値を取ることを示します。

応用:条件付きリスト内包表記

リスト内包表記に条件を加えることもできます。

例:1から10までの数のうち、偶数の2乗をリストにする

# 偶数のみをリストにする条件を加える
squares_of_even = [x ** 2 for x in range(1, 11) if x % 2 == 0]
print(squares_of_even)  # 出力: [4, 16, 36, 64, 100]
  • if x % 2 == 0x が偶数かどうかを確認しています。x % 2 は、x を2で割った余りを計算し、偶数であれば0になります。

辞書内包表記

辞書内包表記では、キーと値のペアを生成します。

# {キー: 値 for 変数 in 使いたい値の集まり}

例:1から5までの数をキー、2乗を値とする辞書

# 数字とその2乗の辞書を生成する
squares_dict = {x: x ** 2 for x in range(1, 6)}
print(squares_dict)  # 出力: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
  • squares_dict は辞書で、キーは x、値は x ** 2 です。
  • 辞書内包表記もリストと同様、for ループで各 x に対して計算を行っています。

集合内包表記

集合内包表記は、ユニーク(一意:1つしか存在しない)な要素のみを保持するデータ構造である「集合」を簡潔に作成できます。

# {式 for 変数 in 使いたい値の集まり}

例:1から5までの数を2乗した集合

# 1から5までの数の2乗の集合を生成する
squares_set = {x ** 2 for x in range(1, 6)}
print(squares_set)  # 出力: {1, 4, 9, 16, 25}
  • 集合内包表記の構文はリストとほぼ同じですが、リストの [] の代わりに {} を使います。
  • 集合は順序を持たず、重複する要素を自動的に排除します。

内包表記と通常のループの違い

内包表記の特徴は、シンプルさ高速な処理です。例えば、次のような従来のループで記述していた処理も、内包表記を使えば1行で書けます。

通常のループ

# 通常のforループでリストを生成する
squares = []
for x in range(1, 11):
    squares.append(x ** 2)
print(squares)

内包表記

# 内包表記で同じリストを生成する
squares = [x ** 2 for x in range(1, 11)]
print(squares)

内包表記により、コードが見やすく短くなり、処理も効率化されます。


まとめ

Python内包表記は、リスト、辞書、集合を効率的に生成するための便利な手法です。基本の構文を覚えれば、よりシンプルで読みやすいコードが書けるようになります。

タイトルとURLをコピーしました