range
このページでは豊富な例を用いてPythonのrangeの使い方を学ぶことができます。
rangeはPythonの型の1つです。公式には数値のイミュータブルなシーケンス(immutable sequence of numbers)と説明されています。 for文などを特定回数ループさせるために使用されることが多く、最大で3つの引数を取ることができます。
実態としてはclassとして定義されており、コンストラクタを呼び出す形式で使用される場面が多いです。
TL;DR
基本
for i in range(4):
print(str(i), 'Python', sep=':')
==> 0:Python
==> 1:Python
==> 2:Python
==> 3:Python
# 生成されるのはrange型
range1 = range(10)
print(type(range1))
==> <class 'range'>
# rangeは反復可能(iterable)なオブジェクトなのでlistを生成可能
range2 = range(5)
list1 = list(range2)
print(type(list1))
==> <class 'list'>
print(list1)
==> [0, 1, 2, 3, 4]
関連情報:forの使用方法
関連情報:type(組み込み関数)の使用方法
関連情報:list(リスト・配列)の使用方法
始まりの値を0以外から設定(引数を2つ指定)
for i in range(0, 5):
print(i, end=' ')
==> 0 1 2 3 4
for i in range(1, 5):
print(i, end=' ')
==> 1 2 3 4
for i in range(5, 6):
print(i, end=' ')
==> 5
list1 = ['Python', 'Golang', 'JavaScript', 'C', 'C#', 'C++']
for i in range(1, len(list1)):
print(i, list1[i], sep=':', end=' ')
==> 1:Golang 2:JavaScript 3:C 4:C# 5:C++
for i in range(-5, 0):
print(i, end=' ')
==> -5 -4 -3 -2 -1
range1 = range(0, -100)
list1 = list(range1)
print(type(list1))
==> <class 'list'>
print(list1)
==> []
for i in range1:
# このブロックの処理は実行されない
print('Never executed.')
print(i, end=' ')
else:
print('for else!')
==> for else!
関連情報:for文でelseを使用する方法
n増加のrangeを生成する(引数を3つ指定)
# 第3引数でrangeの増加数を指定
for i in range(0, 11, 2):
print(i, end=' ')
==> 0 2 4 6 8 10
# 第3引数を指定しないときのrangeの増加数は1
for i in range(0, 11):
print(i, end=' ')
==> 0 1 2 3 4 5 6 7 8 9 10
# 第3引数には負の整数も指定可能
for i in range(-5, -11, -1):
print(i, end=' ')
==> -5 -6 -7 -8 -9 -10
# 以下の引数の組み合わせではfor文の処理は実行されない
for i in range(-5, -11, 2):
# 実行されません
print(i, end=' ')
else:
print('for else!')
==> for else!
# 第3引数に0は指定できないのでエラー
for i in range(0, 100, 0):
print(i)
==> ValueError: range() arg 3 must not be zero
解説
基本
rangeはforと使用すると、引数に指定した値分だけ繰り返し処理を行うことが出来ます。(forをn回繰り返す(range))
実態としては、rangeクラスのコンストラクタを呼び出してrangeオブジェクトを生成しています。 range型は反復可能(iterable)なため、for文のinの後ろに指定して繰り返し処理を行うことができるという仕組みです。
for i in range(2):
print(i)
==> 0
==> 1
range1 = range(3)
print(type(range1))
==> <class 'range'>
関連情報:forの使用方法
関連情報:type(組み込み関数)の使用方法
始まりの値を0以外から設定(引数を2つ指定)
rangeが引数を2つ取る場合、始まりの数値として0以外の値も指定できるようになります。
range(start, stop)
のように指定し、start部分(第1引数)に0または0以外の数値を指定することで始まりの値を指定することが出来ます。
stop部分(第2引数)には引数が1つだった場合の値を指定し、範囲の最終値を指定します。実際には(指定した値-1)の値まで実行されることに注意してください。
for i in range(1, 11):
print(i, end=' ')
==> 1 2 3 4 5 6 7 8 9 10
for i in range(-1, 0):
print(i, end=' ')
==> -1
range1 = range(0, -2)
list1 = list(range1)
print(type(list1))
==> <class 'list'>
print(list1)
==> []
for i in range(0, -2):
# この処理は実行されません
print(i, end=' ')
else:
print('else')
==> else
関連情報:for文でelseを使用する方法
関連情報:list(リスト・配列)の使用方法
n増加のrangeを生成する(引数を3つ指定)
rangeが引数を3つ取る場合、数値の増加数を1以外にも設定することが出来ます。
range(start, stop, step)
のように指定し、step部分(第3引数)に数値の増加数を指定します。第3引数を指定しない場合はデフォルトで1が設定されます。
step部分にはマイナスの整数も指定できますが、0を指定することは出来ないので注意してください。
for i in range(0, 31, 3):
print(i, end=' ')
==> 0 3 6 9 12 15 18 21 24 27 30
for i in range(-100, -111, -2):
print(i, end=' ')
==> -100 -102 -104 -106 -108 -110
for i in range(0, 1, 0):
print(i, end=' ')
==> ValueError: range() arg 3 must not be zero