Python 内包表記

リスト内包表記は、他のリストからリストを作成できる特殊な構文であり、数値や 1 つまたは 2 つのネストされた for ループを扱う場合に非常に役立ちます。

Python 3 のチュートリアルより

リスト内包表記は、リストを作成するための簡潔な方法を提供します。[...] または、特定の条件を満たすそれらの要素のサブシーケンスを作成します。

より詳細な入門については、Python 内包表記:ステップバイステップ入門をお読みください。

リスト内包表記

既存のコレクションから新しいリストを作成する方法を For ループで示します。

# 従来の方式:for ループを使用してリストを作成
names = ['Charles', 'Susan', 'Patrick', 'George']

new_list = []
for n in names:
    new_list.append(n)

new_list
['Charles', 'Susan', 'Patrick', 'George']

そして、リスト内包表記で同じことを行う方法は次のとおりです。

# リスト内包表記:新しいリストを作成するための簡潔な方法
# 構文:[expression for item in iterable]
names = ['Charles', 'Susan', 'Patrick', 'George']

new_list = [n for n in names]  # すべての名前でリストを作成
new_list
['Charles', 'Susan', 'Patrick', 'George']
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

リスト内包表記の基本的な構文は何ですか?
A. [expression for item in iterable]
B. (expression for item in iterable)
C. {expression for item in iterable}
D. expression for item in iterable

数値でも同じことができます。

# ネストされたリスト内包表記:2 つの範囲からタプルを作成
# ネストされた for ループと同等
n = [(a, b) for a in range(1, 3) for b in range(1, 3)]
n
[(1, 1), (1, 2), (2, 1), (2, 2)]

条件の追加

new_list に ‘C’ で始まる名前のみを含めたい場合、for ループでは次のように行います。

# 従来の方式:if 条件でフィルタリング
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']

new_list = []
for n in names:
    if n.startswith('C'):  # 'C'で始まる名前をフィルタリング
        new_list.append(n)

print(new_list)
['Charles', 'Carol']

リスト内包表記では、if ステートメントを最後に追加します。

# 条件付きリスト内包表記:アイテムのフィルタリング
# 構文:[expression for item in iterable if condition]
new_list = [n for n in names if n.startswith('C')]
print(new_list)
['Charles', 'Carol']
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

リスト内包表記でif条件はどこに配置されますか?
A. forキーワードの前
B. for句の後
C. 式の中
D. 角括弧の前

リスト内包表記で if-else ステートメントを使用するには:

# if-else 付きリスト内包表記:条件付き式
# 構文:[expression_if_true if condition else expression_if_false for item in iterable]
nums = [1, 2, 3, 4, 5, 6]
new_list = [num*2 if num % 2 == 0 else num for num in nums]  # 偶数を 2 倍にする
print(new_list)
[1, 4, 3, 8, 5, 12]

セット内包表記と辞書内包表記

list内包表記の基本は、set(集合)とdictionary(辞書)にも適用されます。

セット内包表記

# セット内包表記:内包表記の構文を使用してセットを作成
# 構文:{expression for item in iterable}
b = {"abc", "def"}
{s.upper() for s in b}  # すべての文字列を大文字に変換
{"ABC", "DEF"}

辞書内包表記

# 辞書内包表記:キーと値を入れ替える
# 構文:{key_expression: value_expression for item in iterable}
c = {'name': 'Pooka', 'age': 5}
{v: k for k, v in c.items()}  # キーと値を逆にする
{'Pooka': 'name', 5: 'age'}
クイズ

ログインしてこのクイズに回答し、学習の進捗を追跡できます

辞書内包表記に使用される構文は何ですか?
A. [key: value for item in iterable]
B. (key: value for item in iterable)
C. {key_expression: value_expression for item in iterable}
D. {key, value for item in iterable}

辞書からリスト内包表記を生成できます。

# 辞書からのリスト内包表記:フォーマットされた文字列を作成
c = {'name': 'Pooka', 'age': 5}
["{}:{}".format(k.upper(), v) for k, v in c.items()]  # "KEY:value"としてフォーマット
['NAME:Pooka', 'AGE:5']

関連リンク