Pythonには、リストや辞書、集合などのデータ構造を効率的に作成するための内包表記という機能があります。内包表記を使うと、forループを使ってリストや辞書などを作成する処理を簡潔に書くことができます。この機能はコードの可読性を高め、実行速度も向上させることができます。
この記事では、リスト内包表記、辞書内包表記、集合内包表記について詳しく解説します。
1. リスト内包表記(List Comprehension)
リスト内包表記は、リストを簡潔に生成するための方法です。通常のforループを使ったリスト生成に比べて、より短く読みやすいコードを記述することができます。
基本構文
[式 for 変数 in イテラブルオブジェクト]
例: 1から5までの数を要素とするリストを作成
numbers = [i for i in range(1, 6)]
print(numbers) # [1, 2, 3, 4, 5]
例: 条件付きリスト内包表記
リスト内包表記に条件式を追加することもできます。
# 偶数のみをリストに追加
even_numbers = [i for i in range(10) if i % 2 == 0]
print(even_numbers) # [0, 2, 4, 6, 8]
例: 既存のリストを変換する
既存のリストの各要素に対して操作を行い、新しいリストを生成することも可能です。
# リストの各要素を2乗する
numbers = [1, 2, 3, 4, 5]
squared_numbers = [n ** 2 for n in numbers]
print(squared_numbers) # [1, 4, 9, 16, 25]
2. 辞書内包表記(Dictionary Comprehension)
辞書内包表記は、リスト内包表記と似ていますが、辞書を作成するための方法です。辞書はキーと値のペアを持つデータ構造ですので、内包表記でもキーと値の両方を指定して辞書を作成します。
基本構文
{キー: 値 for 変数 in イテラブルオブジェクト}
例: リストから辞書を生成
# リストの要素をキーに、その2乗を値に持つ辞書を作成
numbers = [1, 2, 3, 4, 5]
squared_dict = {n: n ** 2 for n in numbers}
print(squared_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
例: 条件付き辞書内包表記
条件付きの辞書内包表記を使って、特定の条件に合うペアだけを辞書に追加することができます。
# 偶数のみをキーとして、その2乗を値に持つ辞書を作成
even_squared_dict = {n: n ** 2 for n in range(10) if n % 2 == 0}
print(even_squared_dict) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
3. 集合内包表記(Set Comprehension)
集合内包表記は、集合(重複のない要素の集まり)を生成するための方法です。リスト内包表記と似ていますが、生成されるのは集合になります。
基本構文
{式 for 変数 in イテラブルオブジェクト}
例: リストから集合を生成
# リストから集合を作成(重複は自動的に取り除かれる)
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = {n for n in numbers}
print(unique_numbers) # {1, 2, 3, 4, 5}
例: 条件付き集合内包表記
条件を追加して、特定の条件を満たす要素だけを集合に追加できます。
# 偶数のみを集合に追加
even_numbers = {n for n in range(10) if n % 2 == 0}
print(even_numbers) # {0, 2, 4, 6, 8}
4. リスト・辞書・集合内包表記の利点
内包表記を使うことの利点は、以下の通りです。
-
コードが簡潔になる
内包表記を使うことで、通常のforループを使ったリスト生成のコードがより短くなり、読みやすくなります。 -
パフォーマンスの向上
内包表記は、リストや辞書、集合を一度に生成するため、処理速度がforループよりも速い場合があります。 -
可読性の向上
短く簡潔なコードは、他の開発者が読んでも理解しやすいです。
5. まとめ
-
リスト内包表記は、リストを短く簡潔に生成するための構文です。
-
辞書内包表記は、キーと値のペアから辞書を簡潔に作成できます。
-
集合内包表記は、重複を許さない集合を効率的に生成できます。
-
これらの内包表記は、コードの可読性を高め、パフォーマンスを向上させるために非常に有用です。
コメント