01 / 06
2つを突き合わせたい
名前のリストと点数のリストが別々にある。「ゆいは90点」と並べて出したい。
前のレッスンの enumerate を使えば、番号で引きなおして書ける。でも番号が出てくるぶん、読むときに一手間かかるね。
namaes = ["ゆい", "そう"]tens = [90, 60]for i, namae in enumerate(namaes): print(namae, tens[i])実行結果
ゆい 90 そう 60
イテラブルとイテレータ
INPUT · スライド
01 / 06
名前のリストと点数のリストが別々にある。「ゆいは90点」と並べて出したい。
前のレッスンの enumerate を使えば、番号で引きなおして書ける。でも番号が出てくるぶん、読むときに一手間かかるね。
namaes = ["ゆい", "そう"]tens = [90, 60]for i, namae in enumerate(namaes): print(namae, tens[i])実行結果
ゆい 90 そう 60
02 / 06
これを素直に書けるのが zip(ジップ)。服のファスナーと同じ言葉で、2つのならびの歯をかみ合わせるイメージだよ。
for namae, ten in zip(namaes, tens): と書けば、1周ごとに両方から1つずつが届く。番号はもうどこにも出てこないね。
namaes = ["ゆい", "そう"]tens = [90, 60]for namae, ten in zip(namaes, tens): print(f"{namae}は{ten}点")実行結果
ゆいは90点 そうは60点
03 / 06
zip が配っているのも、enumerate と同じタプルだよ。そのまま print しても中身は見えない。
print(zip(namaes, tens))<zip object at 0x1234abcd>list を通すと、かみ合わせた組がぜんぶ見える。左のならびの1つめと右のならびの1つめが、ちゃんと組になっているのが分かるよ。
namaes = ["ゆい", "そう"]tens = [90, 60]print(list(zip(namaes, tens)))実行結果
[('ゆい', 90), ('そう', 60)]04 / 06
長さがちがったらどうなるか。短いほうが尽きたところで終わるよ。エラーにはならない。
下の例では名前が3つ、点が2つ。3人めの あお は出てこない。エラーが出ないので、うっかりデータを落としても気づきにくいんだ。
数がそろっているはずのものを zip するなら、そろっているかを自分で確かめるのが安心だよ。
namaes = ["ゆい", "そう", "あお"]tens = [90, 60]for namae, ten in zip(namaes, tens): print(namae, ten)実行結果
ゆい 90 そう 60
05 / 06
zip に渡せるならびは2つまでではない。3つ渡せば、受け取る名前も3つになるよ。
リストと文字列を混ぜてもいい。イテラブルならなんでも横に並べられる——この章のはじめに開けたふたが、ここで効いてくるね。
namaes = ["ゆい", "そう"]tens = [90, 60]hyokas = ["A", "C"]for namae, ten, hyoka in zip(namaes, tens, hyokas): print(namae, ten, hyoka)実行結果
ゆい 90 A そう 60 C
06 / 06
この章では、新しくできることはほとんど増えなかった。かわりに、ずっと使っていた for の中身が見えるようになった。
for は iter と next をくり返しているだけenumerate、2つ並べたいなら zipenumerate と zip は、知っているかどうかでコードの見た目が変わる2つだよ。番号を自分で増やしたくなったら、まずこの2つを思い出してみて。
次の章では、リストから新しいリストを1行で作る書きかたを覚えるよ。