イテラブルとイテレータ

INPUT · スライド

番号と中身を同時に取り出す

01 / 06

番号を自分で数えていた

「0ばんめ、1ばんめ」と番号をつけて並べたい。ここまでの道具だと、こう書くしかなかった。

数える変数を用意して、ループの最後で1増やす。動くけれど、増やし忘れると静かにずれる書きかただ。

kudamonos = ["りんご", "みかん"]bangou = 0for kudamono in kudamonos:    print(bangou, kudamono)    bangou += 1

実行結果

0 りんご
1 みかん

02 / 06

enumerate なら数えなくていい

これを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

start で数え始めを変える

人に見せる番号は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)

実行結果

りんご
ぶどう