目的
リストやタプルのような複数のオブジェクトからなるものに対して処理する場合,各要素に対して繰り返し同じ処理をすることがある.ここではそのような際に使用することが多いforによる繰り返しを学ぶ.
説明
forによる繰り返し
複数の要素からなるリストに対して,要素数分だけ繰り返し同じ処理をすることがある.例えば,英語・数学・国語のテストの点数からなるリストの各要素の値を表示する処理は以下のように書くことができる.
これは「リスト[60, 80, 70]の(in)各要素scoreに対して(for)print(score)を行う」という意味であり,3回繰り返し処理が起こり,以下のように試験の点数が表示される.
このscoreは名前なので自由につけてよい.例えば,以下のようにしても結果は同じである.
インデント
Pythonではインデントに意味があり,この場合,4つの半角スペースでインデントされた行が繰り返し処理される.例えば,以下のように書くと,点数の値と型が3回表示される.
以下のように書くと,繰り返し処理が終わった後に,1回だけ「Finished.」という文字列が表示される.
また,インデントが揃っていないとエラーとなる.
forでよく使う変数名
for文のinの後ろにはリストを書くが,以下のようにリストに複数形の名前をつけ,inの前の各要素の名前を単数形にすることが多い.
これは「リストscoresの(in)各要素scoreに対して(for)print(score)を行う」と解釈でき,コードがわかりやすくなったと言えるだろう.
イテラブルなオブジェクト
以上では,リストに対して繰り返し処理を行う例を示したが,タプルや辞書や集合に対しても繰り返し処理をすることができる.Pythonでは,リスト・タプル・辞書・集合はイテラブル(iterable: 繰り返し可能)なオブジェクトであり,for文のinの後ろに記述することにより繰り返し処理が可能となっている.
タプルに対する繰り返し処理以下のようになり,
集合に対する繰り返し処理は以下のようになる.
いずれも結果は以下のようになり,リストと同様に繰り返し処理ができることがわかる.
また,辞書に対する繰り返し処理は以下のようになり,
キーである科目名が表示されていることがわかる.辞書では,valuesメソッドを使用すると値のイテラブルなオブジェクトが取得できる(メソッドについては後の単元で説明する).これをfor文のinの後ろに記述すると,辞書の値に対して繰り返し処理ができる.
また,itemsメソッドを使用するとキーと値のイテラブルなオブジェクトが取得できる.これをfor文のinの後ろに記述し,inの前にキーと値のタプルのアンパックを記述すると,キーと値に対して繰り返し処理ができる.
また,keysメソッドを使用するとキーのイテラブルなオブジェクトが取得できるため,以下のように記述てもキーに対して繰り返し処理ができる.
enumerate関数
イテラブルなオブジェクトの各要素の値とともにインデックス番号を利用したい場合にはenumerate関数を使用すればよい.例えば以下のように,リストscoresにenumerate関数を適用し,inの前に各要素のインデックスと値のタプルのアンパックを記述すると,リストscoresの各要素のインデックスと値に対して繰り返し処理ができる.
出力結果は以下のようになり,各要素のインデックス番号と値が表示される.
zip関数
各要素が対応する複数のイテラブルなオブジェクトがあり,それぞれの各要素に対して繰り返し処理をしたい場合はzip関数を使用すればよい.例えば以下のように,科目名からなるタプルsubjectsと各科目の試験の点数からなるリストscoresがあるとする.タプルsubjectsとリストscoresにzip関数を適用し,inの前にそれぞれの要素の値のタプルのアンパックを記述すると,タプルsubjectsとリストscoresの各要素の値に対して繰り返し処理ができる.
出力結果は以下のようになり,タプルとリストの各要素の値が表示される.
以下のように3つのイテラブルなオブジェクトに対してzip関数を適用し,さらにenumerate関数を適用すれば,3つのイテラブルなオブジェクトの各要素の値とインデックス番号を表示できる.
range関数
range関数を使用すると,数値の範囲を指定して連続する整数値からなるイテラブルなオブジェクトを作成することができる.例えば,以下のようにfor文のinの後ろにrange(10, 20)と記述すると,
10から20-1までの連続する整数値を表示できる.
整数値を1つだけ指定してrange関数を使用すると,0から指定した整数値-1までの範囲の連続した整数値からなるイテラブルなオブジェクトを作成することができる.以下のようにfor文とともに使用すると
10回繰り返す処理ができる.
また,以下のように整数値を3つ指定してrange関数を使用すると,10から20−1までの整数値をステップ2で生成することができる.
range関数の使い方はリストやタプルのスライスの方法とほとんど同じである.
課題
課題0
月曜から日曜のタプルを作成し,繰り返しを使用して表示せよ.
課題1
1月から12月のタプルを作成し,繰り返しを使用して表示せよ.
課題2
学籍番号,氏名,メールアドレスからなる辞書を作成し,キーと値を繰り返しを使用して表示せよ.
課題3
月曜から日曜のタプルを作成し,「1日目はMonday」「2日目はTuesday」…と表示させよ.
課題4
1月から12月のタプルを作成し,「1月はJanuary」「2月はFebruary」…と表示させよ.
課題5
十二支のタプルを作成し,「2020年は子年」「2021年は丑年」…と表示させよ.
課題6
英語・数学・国語・理科・社会の科目名のタプルと試験の平均点のリストを作成し,繰り返しを使用して表示せよ.
課題7
4人の名前のリストと学籍番号のリストとメールアドレスのリストを作成し,繰り返しを使用して表示せよ.
課題8
2桁の偶数を小さいものから順に表示せよ.
課題9
2桁の奇数を大きいものから順に表示せよ.