01 / 06
番号を自分で数えていた
「0ばんめ、1ばんめ」と番号をつけて並べたい。ここまでの道具だと、こう書くしかなかった。
数える変数を用意して、ループの最後で1増やす。動くけれど、増やし忘れると静かにずれる書きかただ。
kudamonos = ["りんご", "みかん"]bangou = 0for kudamono in kudamonos: print(bangou, kudamono) bangou += 1実行結果
0 りんご 1 みかん
イテラブルとイテレータ
INPUT · スライド
01 / 06
「0ばんめ、1ばんめ」と番号をつけて並べたい。ここまでの道具だと、こう書くしかなかった。
数える変数を用意して、ループの最後で1増やす。動くけれど、増やし忘れると静かにずれる書きかただ。
kudamonos = ["りんご", "みかん"]bangou = 0for kudamono in kudamonos: print(bangou, kudamono) bangou += 1実行結果
0 りんご 1 みかん
02 / 06
これを1行にするのが enumerate(エニュメレート)。「番号をつけて並べる」という意味の英語だよ。
for i, kudamono in enumerate(kudamonos): と書くと、i に番号、kudamono に中身が入る。番号は0から自動で増えていく。
受け取る名前をカンマで2つ並べるのは、辞書の items() でやった形と同じだね。配られているのはタプルなんだ。
kudamonos = ["りんご", "みかん"]for i, kudamono in enumerate(kudamonos): print(i, kudamono)実行結果
0 りんご 1 みかん
03 / 06
enumerate が返すものも、range と同じで「頼まれたら次を作る係」だよ。そのまま print しても中身は見えない。
print(enumerate(kudamonos))<enumerate object at 0x1234abcd>中身を見たいときは list を通す。番号と中身を組にしたタプルが、ずらりと並んでいるのが分かるよ。
kudamonos = ["りんご", "みかん"]print(list(enumerate(kudamonos)))実行結果
[(0, 'りんご'), (1, 'みかん')]
04 / 06
人に見せる番号は1から始めたい。そんなときは start=1 を渡すよ。第3章で覚えたキーワード引数だね。
enumerate(kudamonos, start=1) と書けば、番号は1、2、3……と進む。i + 1 と書き足す必要はないんだ。
kudamonos = ["りんご", "みかん"]for i, kudamono in enumerate(kudamonos, start=1): print(f"{i}ばんめは{kudamono}")実行結果
1ばんめはりんご 2ばんめはみかん
05 / 06
enumerate は、初学者と経験者でコードの見た目がいちばん変わる道具のひとつだよ。
Pythonを書く人は、番号を自分で増やしているコードを見ると「enumerate を知らないんだな」とすぐ思う。それくらい当たり前の書きかたになっている。
覚えることは1つだけ。番号がほしくなったら enumerate。それだけで、書くコードがぐっとPythonらしくなるよ。
namaes = ["ゆい", "そう", "あお"]for i, namae in enumerate(namaes, start=1): print(f"{i}ばん {namae}")実行結果
1ばん ゆい 2ばん そう 3ばん あお
06 / 06
ただし、番号を使わないなら足さないこと。i を受け取ったのに一度も使っていないコードは、読む人を「番号は何に使うんだろう」と迷わせるよ。
番号が要るなら enumerate、中身だけなら素の for。受け取るものは、使うものだけにしよう。
次のレッスンは zip。こちらは2つのならびを横に並べて同時に回す道具だよ。
kudamonos = ["りんご", "みかん", "ぶどう"]for i, kudamono in enumerate(kudamonos): if i % 2 == 0: print(kudamono)実行結果
りんご ぶどう