CHAPTER 8 · 4 lessons · 52問

イテラブルとイテレータ

なぜリストにも文字列にもファイルにも同じ for が効くのか。Python の設計思想が見える章。

0 / 52 問クリア

ここまでで、for をいろいろなものに対して使ってきた。リスト、文字列、辞書、ファイル。どれも同じ書き方で回せた。これは偶然ではなくて、Python がそう設計されているからだよ。

その仕組みに名前がついている。回せるもののことを イテラブル、実際に1つずつ取り出す係のことを イテレータ と呼ぶ。for は、裏で「このイテラブルからイテレータをもらって、次の値をくれと繰り返し頼み、もう無いと言われたら終わる」ということをやっている。それだけだ。

この章は、新しくできることが増える章ではない。すでにできていたことの中身を開けて見る章だよ。だから「実用性が低い」と感じるかもしれない。でもここを通っておくと、この先ずっと効いてくる。なぜなら Python のライブラリは、この約束ごとの上に建っているからだ。「for で回せる」と書いてあるドキュメントの意味が、正確に読めるようになる。

具体的には iter と next という2つの関数を使って、for が裏でやっていることを手で再現してみる。1回書いてみると、for がまったく魔法ではないことが腹落ちするはずだよ。

そのうえで、実務でよく使う2つを覚える。enumerate は「何番目か」と「中身」を同時に取り出す道具。for i, kudamono in enumerate(kudamonos): と書けば、番号を自分で数える必要がなくなる。zip は2つのリストを横に並べて同時に回す道具で、名前のリストと点数のリストを突き合わせるようなときに使う。

この2つは、初学者と経験者でコードの見た目がいちばん変わるところだよ。番号を自分で増やしているコードを見たら「enumerate を知らないんだな」と分かるくらいには、Python では当たり前の書き方になっている。

この章のレッスン

for のしくみ

  1. 80なぜ同じ for で回せるのかリストにも文字列にも辞書にも効く for。その正体を開けて見よう。問題へ
  2. 81for を手で再現するiter と next を1回書いてみれば、for がまったく魔法ではないと腹に落ちるよ。問題へ
  3. 82番号と中身を同時に取り出す番号を自分で数えるのは、もうやめていい。enumerate がついでに渡してくれるよ。問題へ
  4. 832つのならびを同時に回す名前のリストと点数のリスト。zip で横に並べて突き合わせよう。問題へ

つぎは「内包表記」。リストから新しいリストを1行で作る。Python らしさがいちばん濃く出る書き方。