今回は「反復(繰り返し)」を担当するfor文について、その基礎の部分を確認していきます。
- for文の書き方を知りたい
- for文がイマイチ分からない
- rangeって何?
という方の参考になればと思います。
for文の書き方 基本構文
例によって基本構文をチェックしていきます。
for i in ["東京","名古屋","福岡"]:
print(i)
#東京
#名古屋
#福岡
for文はfor 変数名 in イテラブルオブジェクト:
を1行目に記述します。ifと同様、最後のコロンは必須です。
その下には処理内容です。こちらもインデントを忘れないように気を付けましょう。
変数名は変数の命名規則に則っていれば何でもかまいませんが、短いアルファベットが使用されることが多いです。
イテラブルオブジェクトについてはここでは詳しく解説しませんが、1つの値の中に複数の要素を持てる型(コンテナ型)がその典型です。文字列、リスト、タプル、辞書、セットなどが使用できます。
ざっくり言うとイテラブルオブジェクトの条件は、
- 中の要素を個別に提示できる
- 要素の「終わり」を宣言することができる
この2つです。イテラブルオブジェクトとfor文が実際どのように働いているのか、これから少し詳しく見ていきましょう。

for文の内部で値はどう動くか
慣れないうちはfor文の中で、各要素がどのような経路をたどるのかをイメージすることが重要です。そこでここではfor文が何をしているのか、その流れを細かく解説していきたいと思います。
① まず初めに、イテラブルオブジェクト(今回はリスト)から最初の要素が提示されます。
② それを変数に代入します。今回の場合は「i」がその変数です。
③ 代入した変数を使用して処理を行います。今回は「print(i)」のみ。
④ 処理が終わると、for文はリストに「次の要素は?」と尋ねます。「次の要素」がある場合、リストはそれを提示します。
⑤ for文は提示された要素に対して、同じように変数に代入を行います。
⑥ この作業を「次の要素」が無くなるまで続けます。
⑦ 要素が無くなると、for文からの「次の要素は?」という問いに対し、リストからは「もう無いよ」という返答が返されます。これがfor文の終了です。
このようにfor文の1行目に記述された変数「i」には、イテラブルオブジェクトの要素1つ1つが交代で代入され、その都度別の値として内部処理で利用されています。
この要素1つ1つの流れが意識できれば、for文を理解するのは難しいことではないのではないでしょうか。
range関数を使ったfor文
for文で利用されるイテラブルオブジェクトですが、文字列やリスト以外でメジャーな型をもう1つご紹介しておきます。range型です。
for i in range(5):
print("気合だ!")
#気合だ!
#気合だ!
#気合だ!
#気合だ!
#気合だ!
イテラブルオブジェクトの場所にrange(回数)と入れることで、for文の内部処理を指定回数分繰り返す事ができます。
しかしこのrange関数、どこがどうイテラブルなんでしょうか?
range関数がfor文で使える理由
"for i in range"という響きは馴染みのある方も多いかと思いますが、この関数はリストや文字列とは見た目が全然違います。
しかしこれは「range型」というれっきとしたイテラブルオブジェクトです。まずrange関数の呼び出しを少し詳しく見ていきましょう。
print(range(5)) #range(0,5)
print(range(0,5,1)) #range(0,5)
この2つの呼び出しは引数の数が違いますが等価です。range(5)と書くと、それは「0以上5未満の1刻みの範囲」を表します。5が含まれないことには注意しましょう。
さらに分かりやすくするために、これを別の型に変換してみます。
print(list(range(5))) #[0, 1, 2, 3, 4]
print(tuple(range(5))) #(0, 1, 2, 3, 4)
「0以上5未満の1刻みの範囲」という意味が、リストやタプルに変換するとより見えやすくなるのではないでしょうか。つまり、
for i in range(5):
はリストを使用して、
for i in [0,1,2,3,4]:
こう書いても同じ意味になります。
最後にもう一度コード全体を見てみますが、少しだけ変えてみます。
for i in range(5):
print(str(i)+"気合だ!")
最初のコードでは、内部処理で変数「i」は使用されていませんでした。今回はrange型の数値を表示させてみましょう。
#0気合だ!
#1気合だ!
#2気合だ!
#3気合だ!
#4気合だ!
0以上5未満の数値が1刻みで現れるのが確認できました。