Pythonの内包表記

Pythonの内包表記
目次

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 == 1i/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}

このコードは、名前とスコアのリストからディクショナリを生成します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次