この記事でお伝えすること
- pythonにおけるrange関数の使い方
- for文とrange関数を組み合わせた使い方
を紹介していきます。
いざ、range関数を使おうとすると、「pythonのrangeの使い方がどう使えばいいか分からない!」
「こういう結果をfo文で出力したい場合はどうやってrangeを使えばいい?」
とpython初心者の方は悩むと思います。
ふと忘れた時に困るfor文で思い通りに数値を並べるためのrange関数の使い方。
本記事でrangeの意味や使い方、for文を組み合わせた使い方を解説していきます。
rangeの使い方
rangeはある特定の範囲の数を持つという意味があります。
rangeの使い方を細かくみると主に4つの使い方があります。
使い方4つを以下に示します。それぞれ細かな違いですが、出力結果は大きく異なります。
- 0から指定値まで連続の数字を持つ
- 指定の範囲内で連続の数字を持つ
- 指定の範囲内で指定の増え方で数字を持つ
- 指定の範囲内で指定した減り方で減らす
0からなのか、指定の範囲内か、指定の増え方か、減り方かなど違いがあります。
それぞれの解説とサンプルコードを示していきます。
0から指定値まで連続の数字を持つ
range(stop)
rangeに入れる引数を一つの数値とします。
するとstopの引数として数値が入ることになります。
この場合は0から入れた引数の一つ前までの整数を返します。
list(range(5))
>> [0, 1, 2, 3, 4]
rangeのstopの引数として5を入れて、リストとして出力しました。
すると、0から5の一つ前の4までを一つずつ出力されます。
ここで、引数とした数値の一つ前までが注意するポイントです。
list(range(5.1))
>>TypeError: 'float' object cannot be interpreted as an integer
stop引数として、整数(integer)ではなく、小数(float)5.1を入力してみます。
rangeはintegerしか受け付けないため、これはエラーとして返ってきます。
list(range(0))
>>[]
stop引数として0を入れると、何も出力されません。
0から0のひとつ前(-1)まで、1ずつ増加という訳の分からない意味になるため、空の結果となります。エラーにならないのはpythonの優しさですね。
ここでわかることは、stop引数への入力は1以上でないといけないです。
指定の範囲内で連続の数字を持つ
range(start,stop)
rangeに入れる引数を二つの数値とします。
するとこの二つはstartとstopの引数とされます。
この場合、startとした引数の数値からstopとした引数の一つ前までの整数を返します。
list(range(1,5))
>>[1, 2, 3, 4]
rangeのstartの引数として1、stopの引数として5を入れて、リストとして出力します。
すると、1から5の一つ前の4までを一つずつ出力されます。
このように引数を2つとした場合、start引数からstop引数とした数値が連番で出力されます。
list(range(5,1))
>>[]
次に先程とは反対にrangeのstart引数として5、stop引数として1を入力します。
すると、出力結果は空です。
これは5から0まで1ずつ増加という意味になるため、意味が通らずこのような結果になります。
ここからstart < stopという条件が必要です。
list(range(1.1,5))
>>TypeError: 'float' object cannot be interpreted as an integer
start引数に1.1という小数(float)を入力すると、エラーが返ってきます。
ここからstartの引数にも整数が必要になってきます。
指定の範囲内で指定の増え方で数字を持つ
range(start,stop,step)
rangeに入れる引数を三つとします。
するとstartとstopとstepの引数として入れられます。
この場合、startとした引数の数値から、stop引数の一つ前まで、stepの引数ごとに順列に返します。
list(range(1,5,2))
>>[1, 3]
rangeのstart引数に1、stop引数に5、step引数に2を入れます。
すると1から二つずつ増加して4までの数値を出力します。それが1,3です。
このように引数を3つとした場合、start引数からstop引数の一つ前までstepで指定した毎に数値が出力されます。
list(range(1,5,10))
>>[1]
次にrangeのstart引数に1、stop引数に5、step引数に10を入れた場合を見てます。
これも1から10ずつ増加して5までの数値を出力しますが、指定範囲の1−5を超えてしまい、結果最初の1のみが出力されます。
このようにstart引数からstop引数の範囲を超えたstep引数を入力すると、最初のstart引数しか出力されません。
list(range(1,5,2.5))
>>TypeError: 'float' object cannot be interpreted as an integer
step引数に2.5という小数(float)を入力すると、エラーが返ってきます。
ここからstepの引数にも整数が必要になってきます。
指定した減り方で減らすことも可能
range(start,stop,-step)
ここではrangeに入れる引数を先程と同じように三つとしますが、stepにマイナスを入れます。
すると、startとした引数の数値から、stopの引数の一つ前まで、step引数ごとに逆順に返します。
list(range(5,1,-2))
>>[5, 3]
rangeのstart引数に5、stop引数に1、step引数に-2を入れます。
すると5から二つずつ減少して2までの数値(stop引数の一つ前)を出力します。それが5,3です。
このように引数を3つとした場合の動きは先程と変わりないです。
しかし、step引数にマイナスを入れた場合、start引数>stop引数としなければなりません。
それが分かるのが次の例です。
list(range(1,5,-2))
>>[]
step引数には-2、start引数は1、stop引数に5を入れてみます。
すると、出力は空になります。
これは「1から5まで-2ずつの数値」となるため、当然空の結果になります。
先ほど説明した通り、step引数にマイナスを入れる場合、start > stopとする必要があります。
list(range(5,1,-10))
>>[5]
では、stepの数値を大きくした場合を見てみます。
5から1まで10ずつ減少させた数値だと、5の次の数でstepが指定範囲を超えます。
そのため、最初の5のみが出力される結果となります。
これは前にも同じ例があったため、分かりやすいですね。
range関数とfor文の出力結果
以上のrange関数の使い方を踏まえて、for文で出力結果を並べてみます。
さまざまな数値の羅列をrangeとfor文で並べたサンプルを作成してみました。
for i in range(10):
print(i)
>>0,1,2,3,4,5,6,7,8,9
#奇数
for i in range(1,10,2):
print(i)
>>1,3,5,7,9
#偶数
for i in range(2,10,2):
print(i)
>>2,4,6,8
#逆順
for i in range(10,0,-1):
print(i)
>>10,9,8,7,6,5,4,3,2,1
#単純な繰り返し
for i in range(3):
print('繰り返し')
>>繰り返し,繰り返し,繰り返し
以上がrangeの使い方になります。
pythonをより学習するならpython全般を学習できる「PyQ」をオススメします。
PyQは、pythonの基礎からスクレイピングや機械学習、Webサイト作成まで広く取り扱っているため、pythonの技術が格段に上がります!
もし気になる方は、一度覗いてみることをオススメします。
以上です。