Chapter 4 / Integration
Lesson 4.1 条件付き集計
for と if を組み合わせて、条件を満たす値だけを数えたり足したりします。
このページは無料で閲覧できるサンプルです。実際に手を動かして写経し、進捗を保存して学習を進めるには、ログインしてから学習ページへお進みください。
このレッスンで学ぶこと
for と if を組み合わせた条件付き集計は、入門段階で覚える最も実用度の高いパターンです。「リストの中から条件に合うものだけ数える」「合計する」「探し出す」という処理は、データ分析、業務アプリ、ゲームのスコア集計など、ほぼあらゆる実際のプログラムで何度も登場します。
ここまでに身に付けた累積パターン (Chapter 2) と if 文 (Chapter 2) の単純な組み合わせなのに、応用範囲は一気に広がります。本レッスンを終えると、自分で課題を発見して「リストから ◯◯を数える」「合計する」というプログラムを書けるようになります。
写経 1
写経 1
偶数だけを数える基本形を写経します。
numbers = [3, 4, 7, 8, 10]
even_count = 0
for number in numbers:
if number % 2 == 0:
even_count += 1
print("even:", even_count)even: 3写経 2
写経 2
条件に合う価格だけを合計します。
prices = [120, 80, 150, 90]
total = 0
for price in prices:
if price >= 100:
total += price
print("high price total:", total)high price total: 270発展問題 (概要のみ)
発展問題
scores の中から 70 以上の値だけを数えるプログラムを書いてみましょう。
scores = [65, 72, 80, 68, 90]
count = 0
発展問題の自動採点はログイン後の学習ページでのみ動作します。
条件付き集計の基本型
count = 0 で初期化し、for value in numbers: でループを回し、if 条件: count += 1 で条件に合うものだけ加算する、という 4 行が条件付き集計の基本形です。「累積パターンの中に if を 1 つ挟むだけ」と覚えれば、何を数えるかを変えるだけで無限に応用できます。合計を取りたいなら count += 1 を total += value に置き換えるだけ、最大値や最小値を更新したい場合も同じ構造で書けます。
偶数判定とよく使う条件
- 偶数: number % 2 == 0 (2 で割った余りが 0)
- 奇数: number % 2 != 0
- ある閾値以上: score >= 70
- 範囲内: 60 <= score <= 80 (Python は連結比較が書ける)
- 文字列を含む: keyword in text
- リストに存在する: target in valid_list
「件数」と「合計」は同じパターンの双子
件数 (count) を取るときは count += 1、合計 (total) を取るときは total += value、と更新する値が違うだけで全体構造は同じです。1 つの for ループの中で、両方を同時に更新することもできます。たとえば「70 点以上の人の合計点と人数を両方知りたい」場合は、count = 0; total = 0 と 2 つ初期化して、ループの中で if score >= 70: count += 1; total += score と書けば、ループ 1 回で 2 つの集計が同時に取れます。リストを 2 回走査するより効率的です。
Python らしい書き方への発展
本レッスンの内容は、もう少し上達すると 1 行で書けるようになります。たとえば 70 点以上の件数は sum(1 for score in scores if score >= 70)、合計は sum(score for score in scores if score >= 70) という書き方 (ジェネレータ式) で表現できます。フィルタリング後の新しいリストが欲しければ [score for score in scores if score >= 70] (リスト内包表記) です。ただしこれらは「for + if + 累積」のロジックが頭に入っていないと読みにくいので、まずは本レッスンの素直な書き方を完全に手に覚えさせるのが先です。
手を動かして練習しましょう
ログインすると、お手本コードを 1 文字ずつ写経しながらブラウザ上で実行し、合否を確認しながら学習を進められます。進捗は自動で保存されます。