2.内包表記
では、先ほどの10本ノック+追加問題の解説付きをまとめます。 「なぜそう書くのか」に重点を置いて説明します。
⸻
🥊 内包表記 10本ノック(解説付き)
⸻
① 基本:1〜10の2乗
[x**2 for x in range(1, 11)]
解説:
- for x in range(1, 11) → 1〜10を順に取り出す
- x**2 → 各要素を2乗
- 内包表記の基本形:
[式 for 変数 in イテラブル]
⸻
② 偶数だけ
[x for x in range(1, 21) if x % 2 == 0]
解説:
- if は「フィルタ」
- % 2 == 0 → 偶数判定
- 構造:
[式 for 変数 in イテラブル if 条件]
⸻
③ if-else
["even" if x % 2 == 0 else "odd" for x in range(1, 11)]
解説:
- if-else は式の中に入る
- フィルタとは位置が違うのが重要
比較:
種類 書き方 フィルタ [x for x in ... if 条件] 分岐 [A if 条件 else B for x in ...]
⸻
④ 文字列操作
[c.upper() for c in "python"]
解説:
- 文字列は「1文字ずつループできる」
- upper() で大文字化
⸻
⑤ フィルタ+変換
[x * 2 for x in [1, 2, 3, 4, 5] if x >= 3]
解説:
- フィルタ → if x >= 3
- 変換 → x * 2
- 順番は「for → if → 式」
⸻
⑥ 二重ループ
[x * y for x in [1, 2, 3] for y in [10, 20, 30]]
解説:
- for を2つ書くとネストになる
- 実質こういうループ:
for x in ...: for y in ...: ...
⸻
⑦ 平坦化
[x for sublist in [[1, 2], [3, 4], [5, 6]] for x in sublist]
解説:
- 先に「外側」、次に「内側」
- sublist → [1,2] など
- x in sublist → 中身取り出し
👉 順番が超重要ポイントです
⸻
⑧ 辞書からリスト
[f"{k}:{v}" for k, v in d.items()]
解説:
- d.items() → (key, value) のタプル
- k, v でアンパック
⸻
⑨ 条件(複雑)
[x for x in range(1, 51) if x % 3 == 0 and x % 5 != 0]
解説:
- and で条件を組み合わせ
- 読み方:
- 3の倍数
- かつ5の倍数ではない
⸻
⑩ ネスト+条件
[x for row in data for x in row if x % 2 == 0]
解説:
- ⑦(flatten)+②(条件)の合体
- 流れ:
- row を取り出す
- rowの中のxを取り出す
- 偶数だけ残す
⸻
🧠 追加問題
⸻
⑪ セット内包表記
{c for c in "banana"}
解説:
- {} → セット
- 重複が自動で消える
- 結果:{'b', 'a', 'n'}
⸻
⑫ 辞書内包表記
{x: x**2 for x in range(1, 6)}
解説:
- 基本形:
{キー: 値 for 変数 in イテラブル}
⸻
🔥 重要まとめ(超大事)
内包表記はこの3パターンを理解すればOKです:
① 基本
[式 for x in iterable]
② フィルタ
[式 for x in iterable if 条件]
③ 分岐
[式A if 条件 else 式B for x in iterable]
⸻
💬 次のステップ
もしよければ:
-  「業務でよく出る内包表記パターン」
-  「可読性が悪くなるNG例」
-  「for文とどっちがいいかの判断基準」
-  「Pandasでの応用」
あたりもかなり実践的なので解説できます。