Pythonで「決まった回数だけ処理を繰り返したい」「1から100までの数字のリストを作りたい」といった場面で必ず使われるのが range() 関数 です。
非常に基本的な関数ですが、「終了値が含まれない」というPython特有のルールや、引数の数によって挙動が変わる点など、意外と奥が深い機能でもあります。
「偶数だけを取り出したい場合はどうすればいい?」
「小数は指定できるの?」
このような疑問を持つ方のために、この記事ではPythonの range() 関数の仕組みから、for 文と組み合わせたループ処理、さらには逆順(降順)やリスト化といった応用テクニックまで、サンプルコード付きで徹底的に解説します。
![]() 執筆者:マヒロ |
|
range関数の基本構文と3つの引数(開始・終了・ステップ)
range() 関数は、整数の数列(シーケンス) を生成するために使われます。
この関数には、引数(括弧の中に渡す値)を1つ、2つ、または3つ指定することができ、それによって生成される数字の範囲が変わります。
それぞれのパターンを詳しく見ていきましょう。
引数が1つの場合:終了値のみ指定(0からスタート)
引数を1つだけ渡すと、「0から始まり、指定した数の手前(未満)まで」 の連番が生成されます。
これが最も基本的な使い方です。
# 0から4までの範囲(5回繰り返す)
for i in range(5):
print(i)
実行結果
0
1
2
3
4
range(5) と書くと、0、1、2、3、4 の5つの数字が生成されます。
重要なのは、指定した「5」は含まれないという点です。
「5個分の数字を作る」と覚えると分かりやすいかもしれません。
引数が2つの場合:開始と終了を指定(1から10まで)
「1から始めたい」「途中の数からスタートしたい」という場合は、引数を2つ渡します。
range(開始値, 終了値) の形式になります。
# 1から10までの範囲(10を含めたい場合は11にする)
for i in range(1, 11):
print(i, end=" ")
実行結果
1 2 3 4 5 6 7 8 9 10
range(1, 11) は、「1以上、11未満」の整数を生成します。
「1から10まで」の処理を行いたい場合は、終了値に 10 ではなく 11 を指定する必要がある点に注意してください。
数学の区間表記で言うと [1, 11) (1 <= i < 11)となります。
引数が3つの場合:ステップ(増減)を指定
「2つ飛ばしにしたい」「3の倍数だけ欲しい」といった場合は、3つ目の引数として ステップ(増分) を指定します。
range(開始値, 終了値, ステップ) の形式です。
# 0から20未満まで、5ずつ増やして表示
for i in range(0, 20, 5):
print(i)
実行結果
0
5
10
15
range(0, 20, 5) は、0からスタートして、5ずつ加算していきます。
0, 5, 10, 15と続き、次の20は「終了値(未満)」の条件に引っかかるため、出力されません。
偶数だけ(ステップ2)や奇数だけを取り出したい時にも便利です。
for文とrange関数を組み合わせたループ処理
range() 関数は単体で使うことよりも、for 文と組み合わせてループ処理の回数を制御するために使われることがほとんどです。
ここでは、実務でもよく使われる具体的なパターンを紹介します。
指定回数だけ処理を繰り返す
「Hello」を3回表示するなど、単純な繰り返し処理を行いたい場合、慣習的に変数名に _(アンダースコア)を使うことがあります。
これは「この変数はループ内で使いませんよ」という合図です。
# "Hello!" を3回表示する
for _ in range(3):
print("Hello!")
実行結果
Hello!
Hello!
Hello!
range(3) が生成する 0, 1, 2という値自体には興味がなく、単に「3回ループを回す」ことだけが目的の場合の書き方です。
もちろん、for i in range(3): と書いても問題ありませんが、使わない変数 i を定義しないことで、コードの意図が明確になります。
リストのインデックス(要素番号)として使う
既存のリスト(配列)を操作する際、要素そのものではなく「何番目の要素か」というインデックスが必要な場合があります。
そのときは、len() 関数と range() を組み合わせます。
fruits = ["apple", "banana", "cherry"]
# リストの長さ分だけインデックスを生成
for i in range(len(fruits)):
print(f"{i}番目のフルーツは {fruits[i]} です")
実行結果
0番目のフルーツは apple です
1番目のフルーツは banana です
2番目のフルーツは cherry です
len(fruits) はリストの要素数である 3 を返します。
つまり range(3) となり、0, 1, 2 というインデックスが生成されます。
これを使って fruits[i] とアクセスすることで、リストの要素を順番に取得できます。
(※ただし、単に要素とインデックスが欲しいだけであれば、enumerate() 関数を使うほうがPythonらしい書き方と言えます)
逆順(降順)や変数を使った応用テクニック
range() 関数は、数字を増やすだけでなく減らしたり、変数を使って動的に範囲を変えたりすることも可能です。
ステップにマイナスを指定してカウントダウン
大きい数から小さい数へ、逆順にループさせたい場合は、ステップに 負の値(マイナス) を指定します。
# 10から1までカウントダウン(終了値は0にする)
for i in range(10, 0, -1):
print(i, end=" ")
print("Start!")
実行結果
10 9 8 7 6 5 4 3 2 1 Start!
range(10, 0, -1) の設定に注目してください。
開始値は 10、終了値は 0(0の手前、つまり1まで)、ステップは -1 です。
初心者がよく間違えるのは終了値の設定です。
「1まで表示したい」場合は、終了値を 1 ではなく 0 に設定する必要があります。
変数を使って範囲を動的に変える
range() の引数には、直接数字を書くのではなく、変数や計算式を入れることができます。
これにより、ユーザーの入力やデータの状況に応じてループ回数を変えるプログラムが作れます。
start_num = 5
end_num = 15
step_val = 3
# 変数を引数に渡す
for i in range(start_num, end_num, step_val):
print(i)
実行結果
5
8
11
14
小数は使える?range関数の注意点と代替案
非常に便利な range() ですが、できないこともあります。
特に「小数」の扱いや、range オブジェクト自体の性質については注意が必要です。
range関数で小数は使えない(TypeError)
range() 関数は 整数(integer) 専用です。 引数に 0.5 などの小数を渡すと、エラーが発生します。
# これはエラーになります
# for i in range(0, 1, 0.1):
# print(i)
# TypeError: 'float' object cannot be interpreted as an integer
小数を使いたい場合は numpy.arange を活用する
小数単位で範囲を指定したい場合は、標準ライブラリではなく、数値計算ライブラリである NumPy の arange 関数や linspace 関数を使うのが一般的です。
import numpy as np
# 0から1未満まで、0.1刻みで生成
for i in np.arange(0, 1, 0.1):
print(f"{i:.1f}")
実行結果
0.0
0.1
0.2
...
0.9
np.arange(start, stop, step) はPython標準の range とほぼ同じ感覚で使えますが、引数に小数を許容します。
データ分析や科学技術計算を行う場合は、こちらを使う機会が多いでしょう。
rangeオブジェクトとリストへの変換
range() 関数が返しているのは、実はリストそのものではなく、range型のオブジェクトです。
これはメモリ効率を良くするための仕組みですが、リストとして扱いたい場合には変換が必要です。
print(range(5)) の中身
r = range(5)
print(r)
print(type(r))
実行結果
range(0, 5)
<class 'range'>
このように、print しても中身の数字(0, 1, 2…)は表示されません。
range オブジェクトは、必要なときに必要な数字を生成する「設計図」のようなものだからです。
list() 関数でリスト化する
中身の数字を具体的なリスト(配列)として取得したい場合は、list() 関数を使って変換します。
# rangeオブジェクトをリストに変換
num_list = list(range(1, 11))
print(num_list)
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(1, 11)) とすることで、1から10までの整数が入ったリスト [1, 2, ..., 10] を一瞬で作成できます。
テストデータを作成したり、連番の配列を用意したりする際に非常に便利なテクニックです。
Pythonのスキルを活かして年収を上げる方法
以上、Pythonの、range関数の範囲指定やfor文での使い方について解説してきました。
なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。
Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



