はじめに
この記事はリスト内包表記について見返すためのメモ。
従来の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))
出力は以下
[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
注意点と性能
複雑な処理になりすぎる場合は、通常のforループを使用する方が適切かも。
小規模なリストでは、リスト内包表記は通常のforループとほぼ同等の性能を示す。大規模なデータセットでは、若干高速になることがある。
辞書からのフィルタリング
listだけでなく辞書型でも可能
# 辞書から特定の条件を満たす値を抽出
students = {'Alice': 85, 'Bob': 92, 'Charlie': 78}
high_scorers = {name: score for name, score in students.items() if score >= 80}
おわりに
これで、コードの簡潔さと読みやすさを向上させられるようになった。しかし、過度に複雑な処理は避け、可読性を意識することが重要。
コメントを残す