Pythonのrange関数で等間隔の値を生成する

この記事では、組み込み関数のrangeの説明をします。

rangeの仕様

rangeの仕様書です。

rangeの引数の仕様は以下となっています。

引数説明
start区間の開始の数値。整数のみ。デフォルトは0。
stop区間の終了の数値(区間には含まれない。)。整数のみ。必須引数。
step間隔の数値。整数のみ。デフォルトは1。

rangeの基本的な使い方です。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
for i in range(2):
print(i)
# 0
# 1
# 引数が1つだとstopの指定となる。
# start=0 stop=2 step=1になる。
for i in range(1, 3):
print(i)
# 1
# 2
# 引数が2つだとstart stopの指定となる。
# start=1 stop=3 step=2になる。
for i in range(2, 6, 2):
print(i)
# 2
# 4
# start=2 stop=6 step=4になる。
for i in range(2): print(i) # 0 # 1 # 引数が1つだとstopの指定となる。 # start=0 stop=2 step=1になる。 for i in range(1, 3): print(i) # 1 # 2 # 引数が2つだとstart stopの指定となる。 # start=1 stop=3 step=2になる。 for i in range(2, 6, 2): print(i) # 2 # 4 # start=2 stop=6 step=4になる。
for i in range(2):
    print(i)

# 0
# 1
# 引数が1つだとstopの指定となる。
# start=0 stop=2 step=1になる。

for i in range(1, 3):
    print(i)

# 1
# 2
# 引数が2つだとstart stopの指定となる。
# start=1 stop=3 step=2になる。

for i in range(2, 6, 2):
    print(i)

# 2
# 4
# start=2 stop=6 step=4になる。

rangeを詳しく

使用するメモリの量

range関数は、rangeオブジェクトを返します。
rangeオブジェクトは常に一定の量のメモリを使います。
start、stop、stepの値のみを保存しているからです。
listを使えば、rangeが生成した値を確認できます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
r = range(1, 6, 2)
print(r)
print(type(r))
print(list(r))
# range(1, 6, 2)
# <class 'range'>
# [1, 3, 5]
r = range(1, 6, 2) print(r) print(type(r)) print(list(r)) # range(1, 6, 2) # <class 'range'> # [1, 3, 5]
r = range(1, 6, 2)
print(r)
print(type(r))
print(list(r))

# range(1, 6, 2)
# <class 'range'>
# [1, 3, 5]

少数は扱えない

rangeが生成する等間隔の値は整数のみです。
start、stop、stepに少数を入れるとTypeErrorになります。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
r = range(1, 6, 0.5)
# TypeError: 'float' object cannot be interpreted as an integer
r = range(1, 6.5, 2)
# TypeError: 'float' object cannot be interpreted as an integer
r = range(1, 6, 0.5) # TypeError: 'float' object cannot be interpreted as an integer r = range(1, 6.5, 2) # TypeError: 'float' object cannot be interpreted as an integer
r = range(1, 6, 0.5)
# TypeError: 'float' object cannot be interpreted as an integer

r = range(1, 6.5, 2)
# TypeError: 'float' object cannot be interpreted as an integer

少数を扱いたい場合は、Numpyのarangeをご使用ください。以下の記事で説明しています。

NumPyのarangeとlinspaceで等間隔の値を生成する NumPyのarangeとlinspaceで等間隔の値を生成する

マイナス指定は可能

引数stepをマイナス値にすれば、デクリメントのfor文を作れます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
r = range(-2, -10, -2)
print(list(r))
# [-2, -4, -6, -8]
r = range(10, 2, -2)
print(list(r))
# [10, 8, 6, 4]
for i in range(5, 0, -1):
print(i)
# 5
# 4
# 3
# 2
# 1
r = range(-2, -10, -2) print(list(r)) # [-2, -4, -6, -8] r = range(10, 2, -2) print(list(r)) # [10, 8, 6, 4] for i in range(5, 0, -1): print(i) # 5 # 4 # 3 # 2 # 1
r = range(-2, -10, -2)
print(list(r))

# [-2, -4, -6, -8]

r = range(10, 2, -2)
print(list(r))

# [10, 8, 6, 4]

for i in range(5, 0, -1):
    print(i)

# 5
# 4
# 3
# 2
# 1