リストと辞書:順序付きの要素とキーと値による集計
エージェント支援の演習:まず自分の予測と実際の出力を記録すること。その後に限り AI エージェントに説明やレビューを頼んでよく、受けた支援は証拠に必ず記録する。
前提条件
Day 08(独立チェックを含む)を修了していること。回復先:Day 08(ループと不変条件)、Day 07 活動 1(変更と再束縛)。このブロックの復習日は Day 07。
学習目標
リストと辞書を作って更新し、所属を調べ、存在しないキーを get で安全に読み、2 つの名前が同じリストを指すときのエイリアスを、空や Unicode の場合も含めて予測する。
手順
参照資料: この活動に割り当てられた既存の読解・練習時間内で、Automate the Boring Stuff with Python, 3rd edition の Chapter 6; Practice Questions; Appendix B answers を参照し、ローカル課題とのつながりを一つ自分の言葉で説明する。既存の演習と合格基準は維持し、外部資料が開けない場合は本コース独自の説明を使う。間隔をあけた復習のウォームアップ: Day 08 の数える処理の不変条件を記憶から述べ、a = [1]; b = a; a.append(2) で b が変わる理由を説明する。今日はリストで同じエイリアスを見る。
新しい考え方: list(text) はコードポイントのリストを返す。リストは要素の順序を保ち、append は末尾に追加する。辞書はキーを値に対応づける。d[key] = value は追加または置き換え、key in d はキーの有無を調べ、d.get(key, 0) はキーがないときに失敗せず 0 を返す。辞書は挿入した順序を覚えている。
出力される各行を予測してから実行する:
chars = list("ñu猫")
print(chars, len(chars))
print(len("n\u0303u"), "n\u0303u" == "ñu")
seen = []
for ch in "abca":
if ch not in seen:
seen.append(ch)
print(seen)
ages = {}
ages["猫"] = 3
ages["犬"] = 5
ages["猫"] = ages["猫"] + 1
print(ages, len(ages), "猫" in ages, ages.get("鳥", 0))
alias = seen
alias.append("z")
print(seen)
print(list(""), {})
演習と予測記録
出力される 6 行すべての予測を書き、実際の出力を記録する。len("n\u0303u") が 3 になる理由、seen に各文字の最初の出現だけが残る理由、alias を通した append が seen も変える理由を説明する。
ここでの "ñ" は 1 コードポイント。"n" に結合用チルダ(U+0303)を続けると 2 コードポイントになる。"鳥" はキーではないので ages.get("鳥", 0) は 0 を返す。alias = seen はリストをコピーしない。2 つの名前が 1 つのリストオブジェクトを指す(Day 05)。
正確な出力:
['ñ', 'u', '猫'] 3
3 False
['a', 'b', 'c']
{'猫': 4, '犬': 5} 2 True 0
['a', 'b', 'c', 'z']
[] {}
list("ñu猫") は 3 コードポイント。分解形の "n\u0303u" は 3 コードポイントで、2 コードポイントの "ñu" とは等しくない。ループはまだ seen にない文字だけを追加するので、結果は ["a", "b", "c"]。既存のキーへの代入は値を置き換えるので "猫" は 4 になり、辞書のキーは 2 つのまま。alias と seen は同じリストなので "z" が seen に現れる。空文字列からは空のリストができ、{} は空の辞書。
6 行すべてを実行前に予測し、食い違いをそれぞれ説明している。デフォルト付きの get、挿入順序、分解形の文字の長さ、リストのエイリアスを説明できる。
出典リソースと来歴
Automate the Boring Stuff with Python, 3rd edition
該当セクション・タイムスタンプ: Chapter 6; Practice Questions; Appendix B answers
検証バージョンと日付: Public edition checked 2026-11-01; moving pages may change
Beginner teaching and answer-keyed practice before checking exact semantics in the Python reference; selected chapters only, not the book's entire automation stack.
No prior programming required for Chapter 1; later chapters assume its basic Python concepts.
Use the original localized explanations, exercises and checks already present in this activity; no external account or purchase is required for that fallback.
比較対象候補リソースと選定評価 (2)
Guided Python syntax but assumes programming familiarity; paired with the beginner text rather than used as its replacement.
Lectures and problem sets teach a broader CS1 course; the book offers shorter text-first entry and an answer appendix.
The Python Tutorial: More Control Flow Tools
該当セクション・タイムスタンプ: 第 4.2〜4.10 節(for、range、関数の定義)。データ構造は同じチュートリアルの第 5 章
検証バージョンと日付: Python 3.12 ドキュメント(確認日: 2026-10-30)
Python の反復処理、関数、コンテナを確認するための一次資料。
Day 01〜06 の Python の式とファイルシステムの基礎
必要な動作はすべて教材内で説明しているため、オフラインでも完了できます。
比較対象候補リソースと選定評価 (2)
同じ構文を文法レベルで定義するリファレンスです。段階を追って学べる構成のため、チュートリアルの章を選びました。
同じ制御フローを講義のペースで扱う教材です。本カリキュラムではターミナルでの演習を通じて概念を扱っているため、採用を見送りました。