💨

Pythonの初心者レッスンーーPython内包表記

2024/06/22に公開

シーリズの目次

Pythonの初心者レッスンをここにまとめています。
https://zenn.dev/datasciencekun/articles/319e0f4b4021c5

Python内包表記(comprehensions)は、リスト、セット、辞書、およびジェネレータを簡潔かつ効率的に作成するための構文です。内包表記を使用すると、少ないコード行でシーケンスを生成、フィルタリング、および変換できます。主に以下の種類があります:リスト内包表記、セット内包表記、辞書内包表記、およびジェネレータ式。

リスト内包表記

リスト内包表記を使用すると、新しいリストを生成するための簡潔な方法が提供されます。
基本構文

[for 変数 in イテラブル]

[for 変数 in イテラブル if 条件]

# 1から10までの整数の2乗のリストを作成
squares = [x**2 for x in range(1, 11)]
print(squares)  # 出力: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 偶数だけを含むリストを作成
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(even_numbers)  # 出力: [2, 4, 6, 8, 10]

セット内包表記

セット内包表記を使用すると、新しいセットを生成するための簡潔な方法が提供されます。
基本構文

{for 変数 in イテラブル}

{for 変数 in イテラブル if 条件}

# 1から10までの整数の2乗のセットを作成
squares_set = {x**2 for x in range(1, 11)}
print(squares_set)  # 出力: {64, 1, 36, 4, 100, 9, 16, 81, 49, 25}

# 重複を取り除いた文字のセットを作成
unique_chars = {char for char in "hello world"}
print(unique_chars)  # 出力: {'d', 'h', 'l', 'r', 'o', 'e', ' ', 'w'}

辞書内包表記

辞書内包表記を使用すると、新しい辞書を生成するための簡潔な方法が提供されます。
基本構文

{キー式: 値式 for 変数 in イテラブル}

{キー式: 値式 for 変数 in イテラブル if 条件}

# 1から5までの整数をキー、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}

# 文字列の長さをキー、文字列を値とする辞書を作成
words = ["apple", "banana", "cherry"]
length_dict = {word: len(word) for word in words}
print(length_dict)  # 出力: {'apple': 5, 'banana': 6, 'cherry': 6}

ジェネレータ式

ジェネレータ式を使用すると、新しいジェネレータを生成するための簡潔な方法が提供されます。ジェネレータはメモリ効率が良く、要素を逐次処理します。
基本構文

(for 変数 in イテラブル)

(for 変数 in イテラブル if 条件)

# 1から10までの整数の2乗を生成するジェネレータ
squares_gen = (x**2 for x in range(1, 11))
print(squares_gen)  # 出力: <generator object <genexpr> at 0x...>

# ジェネレータから要素を取得
for square in squares_gen:
    print(square)

内包表記でのif...else の使用

内包表記内で条件に基づいて異なる値を生成することもできます。

# 1から10までの整数の中で、偶数ならそのまま、奇数ならその2倍を含むリストを作成
processed_numbers = [x if x % 2 == 0 else x * 2 for x in range(1, 11)]
print(processed_numbers)  # 出力: [2, 2, 6, 4, 10, 6, 14, 8, 18, 10]

Discussion