制御構文

[Python] for文とrangeでループを逆順で回す方法

今回は、Pythonでfor文とrangeでループを逆順で回す方法についてご紹介します。

rangeで逆順にループを行う概要

Pythonのfor文を使って逆順にループを回す場合、range関数に負のstepを指定します。

通常のfor文では、range(start, stop)のように正の数の範囲を順番に処理します。

しかし、数字を大きい方から小さい方へ順に処理したい場合は、range(start, stop, step)のstepに負の値(例: -1)を設定する必要があります。

たとえばrange(5, 0, -1)と指定すると、5から1までの値を逆順に取得できます。

range()のパラメータ

Pythonのrange()は、次の3つの引数をとることができます。

  • start: ループの開始値
  • stop: ループが終わる「境界値」(この値自体は含まれません)
  • step: 1回のループごとに増減する値

逆順ループを実現するためには、stepを負の値(例: -1)に設定するのがポイントです。

また、stopは実際にループで回したい数字の1つ前(または1つ後)の値に設定する必要があります。

たとえば10から1まで表示したい場合は、range(10, 0, -1)とします。

これはstart=10stop=0step=-1という意味になり、ループが0まで到達した段階で終了するため、実際に出力されるのは10から1までです。

具体例:数字を逆順に出力する

ここでは、数字を逆順に出力するコード例を示します。

例1: 10から1までを逆順に出力

このコードは、range(10, 0, -1)iを10から1まで順番に取得します。

実行結果

10
9
8
7
6
5
4
3
2
1

例2: 10から0までを逆順に出力

0を含めてすべての数字を逆順に出力したい場合は、stopを-1に設定します。

このコードは、10から始まり0までを出力したあと、-1に達した段階でループが終了します。

実行結果

10
9
8
7
6
5
4
3
2
1
0

よくあるエラーと注意点

stopの値を誤って設定してしまうことで、ループが期待どおりに実行されないケースがあります。

たとえば、range(10, 1, -1)と指定すると、10から2までしか出力されず、1が含まれません。

終了値を含めたい場合は、stopを1つ先に設定することを意識するとよいでしょう。

また、逆順にしたいのにstepを正の値にしてしまうと無限ループになることがあります。

負のループを利用する際は、start > stopかつstep < 0の関係になっているか確認してください。

まとめ

range()を活用すれば、for文で簡単に逆順ループを実現できます。

逆順にする場合は、stopとstepを正確に指定することがポイントです。

必要に応じてstartやstopの値を調整し、思い通りの結果が得られるように設定してみてください。