閲覧中:
2.内包表記

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)+②(条件)の合体
  • 流れ:
    1. row を取り出す
    2. rowの中のxを取り出す
    3. 偶数だけ残す

🧠 追加問題

⑪ セット内包表記

{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での応用」

あたりもかなり実践的なので解説できます。