リスト内包表記とは|Python

0 アクセス

はじめに

この記事はリスト内包表記について見返すためのメモ。
従来のforループを使用した繰り返し処理と比べて、より簡潔で効率的なコーディングが可能。

リスト内包表記の基本構文

リスト内包表記の基本的な構文は以下のようになる:

[式 for 変数 in イテラブル]

シンプルな例

数字のリストから2乗のリストを作成する例:

# 通常のforループ
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
    squared_numbers.append(num ** 2)

# リスト内包表記
squared_numbers = [num ** 2 for num in numbers]

上記の例では、リスト内包表記により、4行のコードが1行に簡略化されている。

条件付きリスト内包表記

if 条件を後ろに追加することでフィルタリングされる

# 偶数のみを2乗する
even_squares = [num ** 2 for num in numbers if num % 2 == 0]

多重ループのリスト内包表記

ネストされたループも表現可能:

# 2つのリストのデカルト積
pairs = [(x, y) for x in [1, 2, 3] for y in ['a', 'b', 'c']]

以下のforループを使ったコードと同値

pairs = []
for x in numbers:
    for y in letters:
        pairs.append((x, y))

出力は以下

注意点と性能

複雑な処理になりすぎる場合は、通常のforループを使用する方が適切かも。

小規模なリストでは、リスト内包表記は通常のforループとほぼ同等の性能を示す。大規模なデータセットでは、若干高速になることがある。

辞書からのフィルタリング

listだけでなく辞書型でも可能

# 辞書から特定の条件を満たす値を抽出
students = {'Alice': 85, 'Bob': 92, 'Charlie': 78}
high_scorers = {name: score for name, score in students.items() if score >= 80}

おわりに

これで、コードの簡潔さと読みやすさを向上させられるようになった。しかし、過度に複雑な処理は避け、可読性を意識することが重要。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です