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爆速講座



