目次
Pythonの内包表記
Pythonの内包表記は、シーケンスを生成するための簡単な方法です。
forループとif文を組み合わせて、リストやディクショナリなどのコレクションを生成できます。
内包表記の基本的な構文
[式 for 要素 in イテラブルオブジェクト if 条件式]
式
コレクションの要素を生成するための式です。
要素
イテラブルオブジェクトから取り出した要素です。
イテラブルオブジェクト
要素を順番に処理するためのオブジェクトです。
条件式
式の評価結果がTrueである要素のみを生成します。
りある
通常のfor文で、リストから新しいリストを作ろうとすると・・・
# 通常のfor文
my_list = [1, 2, 3, 4, 5]
squared_numbers = []
for x in my_list:
squared_numbers.append(x**2)
print(squared_numbers)
# 実行結果
# [1, 4, 9, 16, 25]
こんな感じ
リスト内包表記を使いマス。
# リスト内包表記
my_list = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in my_list]
print(squared_numbers)
# 実行結果
# [1, 4, 9, 16, 25]
スッキリ!
内包表記のメリット
- コードを簡潔にできる
- 繰り返し処理を1行にまとめることができる
- パフォーマンスが向上する可能性がある
リスト内包表記 (List Comprehensions)
例:1から5までの数値の2倍を含むリストを生成するコード
doubled_numbers = [x * 2 for x in range(1, 6)]
print(doubled_numbers)
# 実行結果
# [2, 4, 6, 8, 10]
range(1, 6)
で、開始と終了を指定しています。
イロイロな例
# 1から10までの整数を生成
numbers = [i for i in range(1, 11)]
print(numbers)
# 実行結果
# 1から10までの整数を生成
numbers = [i for i in range(1, 11)]
print(numbers)
# 実行結果
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
range(1, 11)
で、開始と終了を指定しています。
# 奇数を生成
odd_numbers = [i for i in range(1, 11) if i % 2 == 1]
print(odd_numbers)
# 実行結果
# [1, 3, 5, 7, 9]
if i % 2 == 1
でi/2
のあまりが1(奇数)の条件を追加しています。
# 平方数を生成
square_numbers = [i ** 2 for i in range(1, 11)]
print(square_numbers)
# 実行結果
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
式に要素の2乗を追加しています。
さらに、
# リストの要素を逆順に並べる
numbers = [1, 2, 3, 4, 5]
reversed_numbers = [i for i in numbers[::-1]]
print(reversed_numbers)
# 実行結果
# [5, 4, 3, 2, 1]
# リストの要素を2乗して、辞書にする
numbers = [1, 2, 3, 4, 5]
squared_numbers = {i: i ** 2 for i in numbers}
print(squared_numbers)
# 実行結果
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# リストの要素を2乗して、3乗した値を加えたリストを生成
numbers = [1, 2, 3, 4, 5]
squared_cubed_numbers = [i ** 2 + i ** 3 for i in numbers]
print(squared_cubed_numbers)
# 実行結果
# [2, 12, 36, 80, 150]
などなど。
内包表記のネスト(入れ子)
内包表記のネストは、内包表記を別の内包表記の中に入れ子にする構文です。
リスト生成
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_matrix = [num for row in matrix for num in row]
# 実行結果
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
このコードは、多次元の行列(matrix
)をフラットなリスト(flattened_matrix
)に変換します。
条件を組み合わせたフィルタリング
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares)
# 実行結果
# [4, 16, 36, 64]
このコードは、偶数の数値を抽出し、それらの数値の2乗を計算します。
ディクショナリ生成
names = ['Real', 'yoru', 'Boid']
scores = [95, 88, 92]
score_dict = {name: score for name, score in zip(names, scores)}
print(score_dict)
# 実行結果
# {'Real': 95, 'yoru': 88, 'Boid': 92}
このコードは、名前とスコアのリストからディクショナリを生成します。