Python独習塾

  • ホーム
  • Pythonのrangeの解説【for文,1から,逆順】

Pythonのrangeの解説【for文,1から,逆順】

  • 作成日: 2025-06-26
  • 更新日: 2025-07-07
  • カテゴリ: 基本
  • タグ: range, for, reversed, arange

この記事ではPythonのrangeを解説します。
参考にするドキュメントは以下になります。

出典:range — 組み込み型 — Python 3.13.5 ドキュメント

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文を回して総当たりで検証しているだけなので、非常に遅いです。大きな数になると実用的なスピードは出ないでしょう。

関連記事

Pythonのfor文(繰り返し処理、ループ)を解説【range, enumerate】

カテゴリー