Pythonのrangeの解説【for文,1から,逆順】
- 作成日: 2025-06-26
- 更新日: 2025-07-07
- カテゴリ: 基本
- タグ: range, for, reversed, arange
この記事ではPythonのrangeを解説します。
参考にするドキュメントは以下になります。
出典:range — 組み込み型 — Python 3.13.5 ドキュメント
- Pythonのrangeの解説【for文,1から,逆順】
- Pythonのrangeとは?
- Pythonのrangeの使い方は?
- Pythonのrangeで1から生成するには?
- Pythonのrangeで逆順にするには?
- Pythonのrangeをfor文で使うには?
- Pythonのrangeでfloatにするには?
- Pythonのrangeでlistを作るには?
- Pythonのrangeでtupleを作るには?
- Pythonのrangeで集合(set)を作るには?
- Pythonのrangeで辞書(dict)を作るには?
- Pythonのrangeでlen関数を使うには?
- Pythonのrangeで素数を生成するには?
- Pythonのrangeでピタゴラス数を生成するには?
Pythonのrangeとは?
Pythonのrange(レンジ)とは、整数列を生成する組み込み関数です。
公式ドキュメントでは組み込み関数として紹介されていますが、その実態はクラスです。
指定した範囲の整数列を得るために使われます。
たとえば0から4までの1刻みの整数列を得たい場合は以下のようにします。
lis = list(range(4))
print(lis) # [0, 1, 2, 3]
上記の場合はrange(4)
をlist()
に渡しています。これはrange(4)
で0から4まで(4より下まで)の整数列を生成して、それをリストに変換しています。
また、Pythonのrangeはfor文でもよく使われます。
for i in range(4):
print(i)
0
1
2
3
上記はrange(4)
で0から4までの整数列を生成して、それをfor文で取り出しているところです。カウント変数i
には0から順に4より下までの整数が代入されていきます。
Pythonのrangeの使い方は?
Pythonのrangeの使い方は非常にシンプルです。
出典:range — 組み込み型 — Python 3.13.5 ドキュメント
rangeクラスのイニシャライザは以下の種類があります。
# 0から始まる整数をstopより下まで生成する。
class range(stop)
# startから始まる整数をstopより下まで生成する。
class range(start, stop)
# startから始まる整数をstopより下までstep刻みで生成する。
class range(start, stop, step)
それぞれのイニシャライザを実際のコードにすると以下のようになります。
# 0から始まる整数を4より下まで生成する。
obj = range(4)
print(list(obj)) # [0, 1, 2, 3]
# 4から始まる整数を8より下まで生成する。
obj = range(4, 8)
print(list(obj)) # [4, 5, 6, 7]
# 5から始まる整数を20より下まで2刻みで生成する。
obj = range(5, 20, 2)
print(list(obj)) # [5, 7, 9, 11, 13, 15, 17, 19]
rangeの使い方は以上の3通りの使い方のどれかになります。
Pythonのrangeで1から生成するには?
Pythonのrangeで整数列を1から生成するには以下のようにします。
obj = range(1, 5)
print(list(obj)) # [1, 2, 3, 4]
range(1, 5)
のようにrangeの第1引数に1
を指定します。こうすると整数列を1から生成できます。
for文で使う場合は以下のようになります。
for i in range(1, 5):
print(i)
1
2
3
4
Pythonのrangeで逆順にするには?
Pythonのrangeで数列を逆順にしたい場合は2通りの方法があります。以下の方法です。
- reversed関数を使う
- start, stopを指定し、stepを-1にする
reversed関数を使う
rangeで生成する数列を逆順にしたい場合はreversed関数を使うのが簡単です。
reversed関数は引数のシーケンスから逆順に要素を取り出すイテレータを生成します。
出典:reversed関数 — 組み込み関数 — Python 3.13.5 ドキュメント
0から4より下まで整数列を生成するrangeは以下になります。
range(4)
これを単純に逆順にしたい場合はreversed関数にrangeで生成したオブジェクトを渡します。
reversed(range(4))
こうすると以下のように逆順の数列を生成できます。
print(list(reversed(range(4)))) # [3, 2, 1, 0]
print(list(reversed(range(1, 5)))) # [4, 3, 2, 1]
start, stopを指定し、stepを-1にする
たとえば1から5より下までの数列を生成するrangeは以下のようになります。
print(list(range(1, 5))) # [1, 2, 3, 4]
これを逆順にしたい場合は以下のようにします。
print(list(range(4, 0, -1))) # [4, 3, 2, 1]
rangeのイニシャライザは、以下のような構造になっています。
class range(start, stop, step)
start
が開始点、stop
が終了点、step
がステップ数です。数列を逆順にしたい場合はstart
に逆順にした場合の最初の値を、stop
に逆順にした場合の終わりの値を、step
に増加量を指定します。
step
に-1を指定すると、増加量がマイナスになり、数が1ずつ少なくなっていきます。
つまり先ほどのrange(4, 0, -1)
というのは、開始点を4, 終了点を0, ステップ数を-1にしています。
これは「4から0より上まで-1刻みで数列を生成する」という意味になります。
Pythonのrangeをfor文で使うには?
Pythonのrangeをfor文で使うには以下の方法があります。
- 0からstopまでカウントする
- startからstopまでカウントする
- startからstopまでstep刻みでカウントする
- for文でreversedを使い逆順にする
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
0からstopまでカウントする
range(stop)
でstop
までの数列を生成できます。
for i in range(4):
print(i)
0
1
2
3
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
startからstopまでカウントする
range(start, stop)
でstart
からstop
までの数列を生成できます。
for i in range(5, 10):
print(i)
5
6
7
8
9
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
startからstopまでstep刻みでカウントする
range(start, stop, step)
で、start
からstop
までの数列をstep
刻みで生成できます。
for i in range(4, 10, 2):
print(i)
4
6
8
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
for文でreversedを使い逆順にする
rangeのオブジェクトをreversed関数に渡すと、数列を逆順にできます。
for i in reversed(range(4)):
print(i)
3
2
1
0
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
Pythonのrangeでfloatにするには?
Pythonのrangeは整数列を生成する関数です。浮動小数点数は扱えません。
そのため以下の方法を取る必要があります。
- numpyのarangeの使用
- 自作ジェネレーター関数の作成
- itertoolsの使用
- リスト内法表記を使う
numpyのarangeの使用
numpyのarangeを使うと実数列の生成ができます。
import numpy as np
start = 0.0
stop = 2.0
step = 0.5
for n in np.arange(start, stop, step):
print(n)
0.0
0.5
1.0
1.5
自作ジェネレーター関数の作成
自作でジェネレーターを作る方法です。
yieldキーワードをループ中に使うとループを一時停止して値を関数から返すことができます。
def frange(start, stop, step):
while start < stop:
yield start
start += step
for n in frange(0, 2, 0.5):
print(n)
0.0
0.5
1.0
1.5
itertoolsの使用
itertoolsのcountを使うと実数列を作ることができます。これを利用してジェネレーターを作ります。
import itertools
def frange(start, stop, step):
for n in itertools.count(start, step):
if n >= stop:
break
yield n
for n in frange(0.0, 2.0, 0.5):
print(n)
0.0
0.5
1.0
1.5
リスト内包表記を使う
リスト内包表記で整数列を作り、その整数を割ることで実数列を得ることができます。
for n in [n/10 for n in range(4)]:
print(n)
0.0
0.1
0.2
0.3
あるいは少し複雑になりますが、以下のようなリスト内包表記で0.5刻みの実数列を作ることも可能です。
start = 0.0
stop = 2.0
step = 0.5
for n in [start+i*step for i in range(int((stop-start)/step))]:
print(n)
0.0
0.5
1.0
1.5
Pythonのrangeでlistを作るには?
Pythonのrangeでlistを作るには、rangeオブジェクトをlist()
に渡します。
関連記事:Pythonのリスト(list)の解説【append, extend】
lis = list(range(4))
print(lis) # [0, 1, 2, 3]
lis = list(range(5, 10))
print(lis) # [5, 6, 7, 8, 9]
lis = list(range(0, 10, 2))
print(lis) # [0, 2, 4, 6, 8]
以上のようにするとrangeをリストに変換可能です。
Pythonのrangeでtupleを作るには?
Pythonのrangeでtupleを作るには、rangeオブジェクトをtuple()
に渡します。
関連記事:Pythonのtuple(タプル)の解説【イミュータブル、シーケンス】
tup = tuple(range(4))
print(tup) # (0, 1, 2, 3)
tup = tuple(range(5, 10))
print(tup) # (5, 6, 7, 8, 9)
tup = tuple(range(0, 10, 2))
print(tup) # (0, 2, 4, 6, 8)
Pythonのrangeで集合(set)を作るには?
Pythonのrangeで集合(set)を作るには、rangeオブジェクトをset()
に渡します。
s = set(range(4))
print(s) # {0, 1, 2, 3}
s = set(range(5, 10))
print(s) # {5, 6, 7, 8, 9}
s = set(range(0, 10, 2))
print(s) # {0, 2, 4, 6, 8}
Pythonのrangeで辞書(dict)を作るには?
Pythonのrangeで辞書を作るのはzipなどを使うと簡単に作れます。
# 文字と整数の辞書を作る
z = zip('abcd', range(4))
print(z) # <zip object at 0x0000029A8F84D840>
d = dict(z)
print(d) # {'a': 0, 'b': 1, 'c': 2, 'd': 3}
上記は文字をキーに、整数を値にして辞書を作っています。zipに文字列とrangeを渡してzipオブジェクトに変換後、そのzipオブジェクトをdict()
に渡します。そうするとdictがzipオブジェクトを辞書に変換します。
キーを文字ではなく文字列にしたい場合は以下のようにします。
keys = ['abc', 'def', 'ghi', 'jkl']
z = zip(keys, range(4))
print(z) # <zip object at 0x00000265F0FD9480>
d = dict(z)
print(d) # {'abc': 0, 'def': 1, 'ghi': 2, 'jkl': 3}
AからZのアルファベットと、そのコードポイントを辞書にしたい場合は以下のような方法もあります。
d = dict(zip(map(chr, range(65, 91)), range(65, 91)))
print(d)
# {'A': 65, 'B': 66, 'C': 67, 'D': 68, 'E': 69, 'F': 70, 'G': 71, 'H': 72, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'M': 77, 'N': 78, 'O': 79, 'P': 80, 'Q': 81, 'R': 82, 'S': 83, 'T': 84, 'U': 85, 'V': 86, 'W': 87, 'X': 88, 'Y': 89, 'Z': 90}
キーは、rangeでコードポイントを生成し、mapにchrとrangeオブジェクトを渡して、コードポイントを文字に変換します。こうするとA~Zまでの文字を得ることができます。
Pythonのrangeでlen関数を使うには?
Pythonのrangeでlen関数を使うには以下のようにします。
lis = [10, 20, 30]
for i in range(len(lis)):
print(i, lis[i])
# カウント変数iでlisを参照できる。
0 10
1 20
2 30
上記の場合はリスト(lis
)を作り、それのlen(lis)
を取って、rangeに渡しています。
lis
の長さは3なので、これはrange(3)
と同じ意味になります。つまり生成される数列は0, 1, 2
になります。
これがカウント変数i
に代入されるので、lis
をこのi
で参照することが可能になります。
関連記事:Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】
Pythonのrangeで素数を生成するには?
素数とは2以上の整数で、約数が1とそれ自身しか存在しない数を言います。
ある値nが素数かどうか判定するには、色々なアルゴリズムがありますが、もっとも原始的なアルゴリズムは、実際にnが他の数で割り切れるか試す、というものです。
Pythonのrangeで素数を生成するジェネレーターを作るには以下のようにします。
def prime_range(start, stop):
for n in range(start, stop):
if n < 2:
continue
for i in range(2, n):
if n % i == 0:
break
else:
yield n
for prime_num in prime_range(0, 100):
print(prime_num)
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
このジェネレーターに使っている素数判定は簡単な実装ですので、最適化はまだ出来るでしょう。
Pythonのrangeでピタゴラス数を生成するには?
ピタゴラス数とは
a^2 + b^2 = c^2
を満たすa, b, cの値のことです。
def pythagorean_range(start, stop):
for a in range(start, stop):
for b in range(start, stop):
for c in range(start, stop):
if (a**2 + b**2) == c**2:
yield a, b, c
for a, b, c in pythagorean_range(1, 30):
print(a, b, c)
3 4 5
4 3 5
5 12 13
6 8 10
7 24 25
8 6 10
8 15 17
9 12 15
10 24 26
12 5 13
12 9 15
12 16 20
15 8 17
15 20 25
16 12 20
20 15 25
20 21 29
21 20 29
24 7 25
24 10 26
このピタゴラス数の生成アルゴリズムは三次元のfor文を回して総当たりで検証しているだけなので、非常に遅いです。大きな数になると実用的なスピードは出ないでしょう。