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 ** 2
はx
の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 == 0
はx
が偶数かどうかを確認しています。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の内包表記は、リスト、辞書、集合を効率的に生成するための便利な手法です。基本の構文を覚えれば、よりシンプルで読みやすいコードが書けるようになります。