Pythonリスト内包表記完全マスター – 使い方から応用まで徹底解説

リスト内包表記とは?基本構文を1分で理解

**リスト内包表記(List Comprehension)**は、Pythonで新しいリストを効率的に作成する記法です。for文とif文を1行で書けるため、コードが簡潔で読みやすくなります。

基本構文

# 基本形:[式 for 変数 in イテラブル]
squares = [x**2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]
Code language: PHP (php)

従来のfor文との比較

# 従来のfor文(5行)
squares = []
for x in range(5):
    squares.append(x**2)

# リスト内包表記(1行)
squares = [x**2 for x in range(5)]
Code language: PHP (php)

基本的な使い方パターン

1. 単純な変換

# 文字列を大文字に変換
words = ["apple", "banana", "cherry"]
upper_words = [word.upper() for word in words]
print(upper_words)  # ['APPLE', 'BANANA', 'CHERRY']
Code language: PHP (php)

2. 条件付きフィルタリング

# 偶数のみを抽出
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [n for n in numbers if n % 2 == 0]
print(evens)  # [2, 4, 6, 8, 10]
Code language: PHP (php)

3. 条件による値の変更

# 正数は2倍、負数は0に変換
numbers = [-3, -1, 0, 2, 5]
result = [n*2 if n > 0 else 0 for n in numbers]
print(result)  # [0, 0, 0, 4, 10]
Code language: PHP (php)

実践的な活用例

1. 文字列処理

# CSVデータの前後空白を削除
csv_data = [" apple ", " banana ", " cherry "]
clean_data = [item.strip() for item in csv_data]
print(clean_data)  # ['apple', 'banana', 'cherry']
Code language: PHP (php)

2. 数値計算

# 温度をセルシウスからファーレンハイトに変換
celsius = [0, 20, 30, 40]
fahrenheit = [c * 9/5 + 32 for c in celsius]
print(fahrenheit)  # [32.0, 68.0, 86.0, 104.0]
Code language: PHP (php)

3. 辞書との組み合わせ

# 辞書の値を2倍にした新しいリスト
scores = {"太郎": 80, "花子": 90, "次郎": 75}
doubled_scores = [score * 2 for score in scores.values()]
print(doubled_scores)  # [160, 180, 150]
Code language: PHP (php)

高度な使い方

1. ネストしたリスト内包表記

# 2次元リストの平坦化
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [item for row in matrix for item in row]
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Code language: PHP (php)

2. 複数の条件

# 3で割り切れ、かつ偶数
numbers = range(1, 21)
result = [n for n in numbers if n % 3 == 0 and n % 2 == 0]
print(result)  # [6, 12, 18]
Code language: PHP (php)

3. 関数呼び出しとの組み合わせ

# 文字列の長さを取得
words = ["Python", "Java", "JavaScript", "Go"]
lengths = [len(word) for word in words]
print(lengths)  # [6, 4, 10, 2]
Code language: PHP (php)

パフォーマンス比較

実行速度の比較

方法実行時間(相対値)メモリ使用量
for文1.0標準
リスト内包表記0.7標準
map関数0.8少ない
import time

# パフォーマンステスト例
start = time.time()
result = [x**2 for x in range(100000)]
print(f"リスト内包表記: {time.time() - start:.4f}秒")
Code language: PHP (php)

よくある間違いと対処法

1. 可読性を犠牲にした複雑な記述

# ❌ 読みにくい
result = [x*2 if x > 0 else x//2 if x < 0 else 0 for x in nums if x != 5]

# ✅ 読みやすい
def process_number(x):
    if x > 0: return x * 2
    elif x < 0: return x // 2
    else: return 0

result = [process_number(x) for x in nums if x != 5]
Code language: PHP (php)

2. メモリ使用量の考慮不足

# ❌ 大量データで重い
huge_list = [x**2 for x in range(10000000)]

# ✅ ジェネレータ式でメモリ効率化
huge_gen = (x**2 for x in range(10000000))
Code language: PHP (php)

辞書・セット内包表記も活用

辞書内包表記

# 辞書内包表記
words = ["apple", "banana", "cherry"]
word_lengths = {word: len(word) for word in words}
print(word_lengths)  # {'apple': 5, 'banana': 6, 'cherry': 6}
Code language: PHP (php)

セット内包表記

# セット内包表記(重複を自動除去)
numbers = [1, 2, 2, 3, 3, 4, 5]
unique_squares = {x**2 for x in numbers}
print(unique_squares)  # {1, 4, 9, 16, 25}
Code language: PHP (php)

実務でよく使うパターン集

1. データクリーニング

# 空文字列を除去
data = ["apple", "", "banana", "", "cherry"]
clean = [item for item in data if item]
print(clean)  # ['apple', 'banana', 'cherry']
Code language: PHP (php)

2. ファイル処理

# ファイル拡張子をチェック
files = ["doc.txt", "image.jpg", "script.py", "data.csv"]
py_files = [f for f in files if f.endswith('.py')]
print(py_files)  # ['script.py']
Code language: PHP (php)

3. 数値のフォーマット

# 小数点以下2桁で四捨五入
prices = [10.567, 20.123, 30.999]
formatted = [round(p, 2) for p in prices]
print(formatted)  # [10.57, 20.12, 31.0]
Code language: PHP (php)

まとめ:効果的な使い分け

リスト内包表記を使うべき場面

  • 単純な変換や条件での絞り込み
  • 3行以内で書ける処理
  • パフォーマンスを重視する場合

従来のfor文を使うべき場面

  • 複雑な条件分岐がある場合
  • デバッグが必要な処理
  • 可読性を最優先にしたい場合

リスト内包表記をマスターすることで、Pythonコードがより洗練され、実行速度も向上します。まずは基本パターンから始めて、徐々に応用的な使い方を身につけていきましょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座