※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト:【Python入門】range関数で繰り返し処理をする方法とは?
#【Python入門】range関数で繰り返し処理をする方法とは?
Pythonではfor文を使って一定の回数だけ処理を繰り返すことがあります。その際に、数値のリストを用意してその長さだけ回すこともできますが、rangeを使うともっと楽に、Pythonらしい記述をすることができます。
今回はPythonのrangeの使い方について説明します。
##rangeの使い方
Pythonで一定回数処理を繰り返す場合は、その回数文の長さのリストを使うことで実現できます。例えば、5回繰り返したい場合は長さ5のリストを使います。
list1 = [1, 2, 3, 4, 5]
count = 0
for x in list1:
count += 1
print('ループ回数:{}'.format(count))
実行結果
ループ回数:5
この方法でも問題はありませんが、例えば100回や1000回といった長い回数繰り返す場合は、それだけの長さのリストを用意するのは面倒ですし、時間もかかります。
特定の数だけループを繰り返したい場合はrange関数を使いましょう。range関数は指定した長さの、連続した整数のリストを自動で生成する関数です。for文とrange関数を組み合わせることで、任意の回数だけループをすることができます。
for 変数 in range([始まりの数値,] 最後の数値[, 増加する量]):
#ループ処理
rangeには始まりの数値、最後の数値、増加する量の3つの引数がありますが、このうち始まりの数値と増加する量は省略することができます。range()に数値を1つ渡すと、それが最後の数値となり、0から「最後の数値 – 1」までの値が格納されたリストが作成されます。
count = 0
for x in range(5):
print(x)
count += 1
print('ループ回数:{}'.format(count))
実行結果
0
1
2
3
4
ループ回数:5
この例ではrange()に5を渡しているので、「0から4までの要素を持つ長さ5のリスト」が作られ、そこから一つずつ要素を取り出すので、5回のループを行うことができます。最初の数字を0ではなく任意の数字にしたい場合は、引数の「始まりの数値」を入力します。
count = 0
for x in range(1, 5):
print(x)
count += 1
print('ループ回数:{}'.format(count))
実行結果
1
2
3
4
ループ回数:4
rangeの引数を(5)から(1,5)に変更しました。これにより、rangeによって返されるのが「1から4までの要素を持つ長さ4のリスト」になったので、ループ回数が4回になりました。
また、「増加する量」を指定すれば、次の要素に追加される値も自由に変えることができます。これにより、0から8まで2ずつ増えるリストや、0から9まで3ずつ増えるリストなどを簡単に作ることができます。
count = 0
for x in range(0, 10, 2):
print(x)
count += 1
print('ループ回数:{}'.format(count))
実行結果
0
2
4
6
8
ループ回数:5
この例では開始が0, 最後が10になっていますが、増える量を2にしています。そのためrangeは「0から8まで2ずつ増える長さ5のリスト」を返すことになるので、ループ回数は5回となります。
また、rangeでは負の数を使うことができます。始まりの値と最後の値を逆にし、増える量を負の数にすることで、逆順に並んだリストを作成することもできます。
count = 0
for x in range(10, 0, -2): #負の数を渡す
print(x)
count += 1
print('ループ回数:{}'.format(count))
実行結果
10
8
6
4
2
ループ回数:5
##xrangeとの違い
Pythonのバージョンが2.x.xの場合は、rangeとよく似た関数としてxrangeがあります。xrangeは使い方や実行結果はrangeと全く同じです。
count = 0
for x in xrange(5):
print(x)
count += 1
print('ループ回数:{}'.format(count))
実行結果
0
1
2
3
4
ループ回数:5
では、rangeとxrangeとの違いは何かというと、xrangeのほうがメモリを節約できるという点です。rangeは引数で指定された要素を持つリストを作り、そのリストから要素を取り出すようにしてfor文を実行します。これに対してxrangeでは最初にリストを作ってからfor文を実行するのではなく、for文で取り出す際に必要に応じて値を生成します。つまりリストを作らないため、同じ処理を行う上でもxrangeのほうがメモリを節約することができます。
ただ、rangeとxrangeの差はとても些細なものなので通常ではわざわざxrangeを使う必要がありません。基本的にはrangeを使うとよいでしょう。
また、Python3系では、rangeの構造がxrangeに近いものになったのでxrange自体が廃止されてしまいました。そのため、Python3系の場合は特に気にせずrangeを使うとよいでしょう。