イテレーション(反復処理)とは?
プログラミングにおけるイテレーション(反復処理)とは、条件が満たされるまで、あるいはコレクションのすべての要素を処理し終えるまで、一連の命令を繰り返すことで、普通はループを使います。繰り返される命令を1回通ることも、イテレーションと呼びます。
更新日: 2026年9月24日
10,000人のユーザーにリマインダーメールを送るプログラムに、送信のコードが10,000個書かれているわけではありません。コードは1つだけで、ループの中にあり、ループがユーザーごとに1回ずつそれを実行します。1回の実行が1回のイテレーションで、ループ全体が、プログラムがユーザーを順に処理する(イテレートする)方法です。
イテレーションのしくみを順番に
どのループも同じサイクルをたどります。
- チェック。 ループの条件を調べます。条件はブール値です。次の要素はあるか、カウンタはまだ上限より小さいか。
- 実行。 答えが真なら、ループ本体を1回実行します。
- 更新。 次の要素に進むか、カウンタを変えます。
- 繰り返し。 手順1に戻ります。チェックの結果が偽になると、プログラムはループの後のコードに進みます。
次の例では本体が5回実行され、各イテレーションで次の数を累計に足していきます。
iteration 1 total is now 1
iteration 2 total is now 3
iteration 3 total is now 6
iteration 4 total is now 10
iteration 5 total is now 15
Done: 15
変数 total はループの外にあるので、あるイテレーションから次のイテレーションへ値が引き継がれます。ループの前に設定し、ループの中で更新する変数というこのパターンはアキュムレータと呼ばれ、何かを計算するループのほとんどに登場します。
回数で決まるループと条件で決まるループ
イテレーションには2種類あります。確定反復は、決まった回数だけ実行されます。リストの要素ごとに1回、1から5までの数ごとに1回、といった具合です。Pythonの for ループはこのために作られていて、range()と一緒に使うことがよくあります。
不定反復は、何かが起こるまで繰り返し、何回繰り返すかは事前にわかりません。これには while ループが合っています。
8 years, balance 214.36
年10%で増えるお金は、2倍になるまで8年かかります。プログラムは方程式を解くのではなく、反復によってそれを見つけました。Pythonでの両方の書き方は、forループとwhileループのガイドで説明しています。
コレクションをイテレートする
ほとんどのループはコレクションをたどります。配列の要素、文字列の文字、ファイルの行などです。Pythonの for ループは各要素を直接渡してくれ、enumerate() を使うとその位置も加わります。
0 apple
1 banana
2 cherry
裏側では、for は iter() でコレクションにイテレータを求め、イテレーションごとに1回そのイテレータに対して next() を呼んでいます。同じ呼び出しを自分でしてみることもできます。
red
green
blue
no more items
既定値を渡さないと、4回目の next() は StopIteration を発生させます。この例外が、コレクションが終わったことを for ループが知るための合図です。
ほかの言語では、同じ考え方を別の書き方で表します。Cはインデックスで数え、JavaとJavaScriptには各要素を渡してくれるループもあります。
for (int i = 0; i < 3; i++) {
printf("%s\n", colors[i]);
}
for (String color : colors) {
System.out.println(color);
}
for (const color of colors) {
console.log(color);
}
反復と再帰の違い
再帰は、処理を繰り返すもう1つの方法です。関数が、問題の小さな版に対して自分自身を呼び出し、直接答えられる場合に届くまで続けます。一方で書けるものは他方でも書けますが、振る舞いは違います。
| 反復 | 再帰 | |
|---|---|---|
| 繰り返し方 | ループが先頭に戻る | 関数が自分自身を呼ぶ |
| 止まるとき | ループの条件が偽になる | 基底ケースに届く |
| メモリ | 何回繰り返しても同じ量 | 終わっていない呼び出しごとに1つのスタックフレーム |
| 典型的な失敗 | 無限ループ | スタックオーバーフロー(Pythonでは RecursionError) |
| 向いているもの | リスト、カウンタ、条件を満たすまでの繰り返し | ツリー、入れ子のデータ、分割統治 |
実際に効いてくるのはメモリの行です。Pythonは既定で入れ子の呼び出しを約1,000回までしか許さないので、5,000個の数の再帰的な合計は、ループなら問題なく計算できるところで失敗します。
5050 5050
12502500
sum_recursive(5000) failed: RecursionError
再帰の可視化では、呼び出しのスタックが1ステップずつ伸び縮みする様子を見られます。
よくある間違い
無限ループ。 条件が決して偽にならない while ループは、プログラムを止めるまで動き続けます。よくある原因は更新の手順を忘れることで、たとえば count = count - 1 を書き忘れた場合です。
1つずれる。 range(1, 5) は1、2、3、4を返し、5は含みません。終わりの値は除外されるからです。1回多く、あるいは1回少なく実行されるループもエラーなしで動いてしまい、間違った答えを出します。これは論理エラーです。
ループ中のリストを変更する。 イテレートしているリストから要素を削除すると、ループが要素を飛ばしてしまいます。
[1, 2, 3]
2が1つ残りました。最初の2を削除したことで、2つ目の2が、ループがすでに通り過ぎた位置にずれたからです。代わりに新しいリストを作りましょう: numbers = [n for n in numbers if n != 2]。
次に読むもの
ループはコレクションをたどるので、配列とは何かが自然な関連ページです。ループがいつ止まるかを決める真か偽かのチェックについてはブール値とは何かで説明しています。ループがエラーメッセージなしで間違った結果を出すときは、論理エラーとは何かを読んでください。ループを書く練習をするなら、Pythonコースを始めるか、上の例をPythonプレイグラウンドで試してみましょう。
よくある質問
イテレーションの具体例を教えてください
for ループは、名前ごとに1回、合計100回のイテレーションを行います。正しいパスワードが入力されるまで尋ね続ける while ループもイテレーションです。こちらは何回繰り返すかが事前にはわかりません。再帰と反復はどちらが優れていますか?
イテレーションとループは同じものですか?
for や while のような言語の構文で、イテレーションはそれが行う繰り返しのことです。ループ本体を1回通ることもイテレーションと呼ぶので、5回実行されるループは5回のイテレーションを行います。スプリントとイテレーションの違いは何ですか?
イテラブルとはどういう意味ですか?
range のように、for でループできるオブジェクトのことです。Pythonでは、iter() がイテレータを作れるオブジェクトがイテラブルです。整数はイテラブルではないので、for x in 5: は TypeError になります。