Pythonのrange関数は、数値が連続したリストを素早く作る時と、for文との組み合わせで指定回数、同じ処理を繰り返すプログラムを書きたいときに非常によく使うものです。
ここでその使い方を詳しく解説します。
1. range()関数とは
Pythonのrange関数は次のように書きます。
''' range関数の書き方 '''
# 第一引数のみ渡す場合は数値を入れる。
range(n)
# 第一引数startと第二引数stepで範囲を
# 第三引数のstepでいくつ置きかを指定。
range(start, stop, [step])
range()の引数には数値のみを入れる使い方と、start, stop, stepの第三引数まで入れる使い方があります。これらはすぐ後に解説するので、まずはrange関数の返り値の型を確認してみましょう。
1.1. range()関数の返り値/戻り値
''' range関数の返り値の確認 '''
# そのまま使うとrange型で出力
print(range(10))
# 型の確認
print(type(range(10)))
このように、range関数の返り値は、range型のオブジェクトです。返り値については『Ptyhonの関数の基礎』で、型については『Pythonの型とは』で解説しています。
1.2. list()関数とrange()関数の組み合わせ
range関数は通常は返り値をそのまま使うことはありません。次のコードのようにlist関数と組み合わせて、list型オブジェクトに変換するのが、もっとも基本的な使い方です。
''' list関数と組み合わせるのがrange関数の基本的な使い方です。 '''
print(list(range(10))) # 0から9(n-1)までの連続した数値のリストを作る
これを変数に代入して使うことも多いです。
''' range関数で作ったリストを変数に代入することが多いです。 '''
num_list = list(range(10))
print(num_list)
リストやlist関数については『初心者のためのPythonのリストの作成方法まとめ』でご確認ください。
1.3. for文とrange()関数の組み合わせ
Pythonのrange関数はfor文と組み合わせて、ある処理を指定回数だけ繰り返したい時にも使います。次のコードをご覧ください。
''' Pythonのrange関数はfor文で指定回数、
繰り返し処理を行いたい時にも使います。'''
for i in range(5):
print(i)
この処理は丁度、下図のようになっています。
このコードでは、「実行する処理」に書いたのはprint(i)です。そのため、iが指定回数である5回繰り返して出力されています。これはよく使う書き方なので、このまま覚えておきましょう。
なおfor文については『Pythonのforを使った繰り返しのまとめ』で解説しているので目を通しておくと良いでしょう。
2. range()関数でリストを作成
さて、Pythonのrange関数の使い方ですが、引数を1つだけ渡す方法、第一引数と第二引数を渡して範囲を指定する方法、第三引数まで渡してステップを指定する方法があります。
次のコードをご覧ください。
''' Pythonのrange関数の引数 '''
# 引数を1つだけ渡す
print(list(range(10)))
# 第一引数と第二引数で範囲を指定
print(list(range(1, 11)))
# 第一引数と第二引数で範囲を第三引数でステップを指定
print(list(range(1, 10, 2)))
それぞれ一つずつ見ていきましょう。
2.1. 連続した数値のリストを作る
range関数に第一引数のみを渡した場合、その数値まで連続した数値のリストを作ることができます。以下をご覧ください。
''' 引数を1つだけ渡すと連続した数値のリストを作る '''
print(list(range(5))) # 0から4までのリスト
print(list(range(10))) # 0から9までのリスト
print(list(range(20))) # 0から19までのリスト
このように、0からn-1までの連続した数値のリストを作ることができます。
2.2. 範囲を指定する
Pythonのrangeの範囲を指定するには、第一引数に開始位置(start)を第二引数に終了位置(stop)を渡します。次のコードを見てみましょう。
''' Pythonのrangeの範囲指定はstartとstopを渡す '''
# 範囲指定で1から10のリストを作ってみましょう。
print(list(range(1, 11)))
# 範囲指定で-5から5のリストを作ってみましょう。
print(list(range(-5, 6))) # -5から6のリスト
このように、第二引数まで渡すと、startで指定した数値から、stopで指定した数値-1までのリストを作ることができます。
2.3. stepを指定する
Pythonのrange関数に第三引数のstepを指定すると、stepで指定した数値置きの数値のリストを作ることができます。
''' 第三引数でstepを指定してみましょう。 '''
# 偶数のリスト
num_list = list(range(0, 11, 2))
print(num_list)
# 奇数のリスト
odd_list = list(range(1, 12, 2))
print(odd_list)
# 5つ置きの数値のリスト
tri_list = list(range(0, 21, 5))
print(tri_list)
このように第三引数のstepを使うと、偶数のリストを作ったり奇数のリストを作ったりすることができるようになります。
2.4. 逆順のリストを作る
Pythonのrangeで逆順のリストを作るには、第三引数のstepにマイナスの数値を渡します。以下で確認してみましょう。
''' stepに-1を渡すとrangeで逆順でカウント '''
''' この時srartとstopを逆に渡します。 '''
# 10から1を逆順で。
print(list(range(10, 0, -1)))
# 5から-5を逆順で。
print(list(range(5, -6, -1)))
# 逆順の偶数リスト
print(list(range(10, -1, -2)))
# 逆順の奇数リスト
print(list(range(11, 0, -2)))
このように、逆順リストを作る時は、第一引数のstartに第二引数のstopよりも大きな数字を指定する必要があります。そして、第三引数にマイナスの数字を渡します。
昇順の場合はstartからstop-1までの数値が出力されていましたが、逆順の場合はstartからstop+1までの数値が出力される点にも注意しましょう。
2.5. 引数の指定条件が合わない場合は空のリストを作る
なお、もし引数の指定条件が互いにバッティングする場合は、空のリストが作られます。次のコードをご覧ください。
''' 値と指定条件が合わない場合は空のリストになります。 '''
print(list(range(2, 14, -2)))
startで2、stopで14、stepで-2を指定しています。逆順リストを作る場合は、startがstopより大きな数値でなければ辻褄が合いませんね。そのため、この場合は空のリストが作られています。
3. for文とrange()関数の組み合わせ
続いて、Pythonのfor文とrange関数を組み合わせる使い方を詳しく見ていきましょう。これも、list関数とrange関数を組み合わせる使い方と並んで、Pythonのrangeでおさえておくべきものの一つです。
for文はある処理を繰り返し行いたいときに使う構文です。これについては『Pythonのforを使った繰り返しのまとめ』でもご確認ください。
3.1. 基本的な書き方
Pythonのforとrangeを組み合わせると、for文の中に書いた処理を指定回数繰り返すことができます。次のコードでは、print(i)という処理を、range関数で指定した回数(5回)繰り返していますね。
''' for文に書いた処理を指定回数繰り返します。 '''
for i in range(5):
print(i)
これは次のように書くとわかりやすいと思います。
''' こう書くとわかりやすいと思います。 '''
for i in range(5):
print(f'{i}回目のループ')
for文の中に書いた「print(f'{i}回目のループ’)」という処理を指定回数である5回行なっていますね。
もちろんfor文でも、range関数にstart, step, stopの三つの引数を渡すことができます。その場合は、次のコードのような出力結果になります。
''' start, stop, stepを書くこともできます。'''
for i in range(0, 6, 2):
print(i)
range関数で指定した数値のみ、「print(i)」で出力されていますね。これも次のように書くと、よりわかりやすいと思います。
''' こう書くと分かりやすいと思います。 '''
for i in range(0, 6, 2):
print(f'{i}回目のループ')
もちろん、逆順で出力することも可能です。
''' 逆順で出力することも可能です。 '''
for i in range(2, -3, -1):
print(f'{i}回目のループ')
3.2. 小数(float)を出力する
さて、プログラミングの際に、連続した小数を出力したい時もあると思います。ただしrange関数の引数には小数を渡すことができません。
そんな場合は次のように書けば可能です。
''' このように書くとrangeで小数(float)を出力することができます。 '''
for i in range(1, 6):
print(i * 1/10)
この書き方を使うと、次で見るように、小数の連続したリストを作ることができます。
3.3. 小数(float)のリストを作る
Pythonのrange関数で小数の連続したリストを作る方法の一つとして、次の書き方があります。
''' 小数のリストを作りたいときはこのように書けば可能です。'''
list = []
for i in range(1, 6):
list.append(i*1/10)
print(list)
ここで使用しているappendメソッドは『Pythonのappendの使い方とよく聞かれることまとめ』でご確認ください。
4. まとめ
Pythonのrange関数は、連続した数値を出力することができるものです。
これとlist関数を組み合わせると、連続した数値のリストを素早く作ることができるようになります。その際は、第一引数startと第二引数stopで範囲指定を行うことができます。さらに第三引数のstepを指定すると、逆順のリストや指定の数値置きのリストを作ることができます。
そして、指定回数の処理を繰り返すプログラムを作る時に、range関数とfor文を組み合わせる書き方は、Pythonで非常に多く見られる書き方です。これもしっかり理解しておきましょう。
なお、list関数とrange関数だけでは小数のリストを作ることができませんが、for文と組み合わせるとそれも可能になります。
以上、自分でコードを書いて確認しながら、しっかり理解を深めておきましょう。
コメント