【Python】for文で活用できるrange関数の使い方を解説

・Pythonのfor文でrange関数を使う方法が知りたい
・range関数を使う際の注意点が知りたい

という方に向けた記事になります。

Pythonの基本的な文法は理解してきたけど、range関数の書き方が分からない、range関数を使ってみたけど思ったような動きにならない…と詰まることがあります。

そこで本記事では、「for文で活用できるrange関数の実践的な使い方」について詳しく解説します。

ななみ

for文の処理は何となく理解してきたPython学習中の方がrange()を理解し活用できるよう、解説していきます!

目次

Pythonのrange関数とは?for文での基本動作

Pythonのrange関数は、指定した範囲の整数を順番に生成する組み込み関数であり、繰り返し処理を行う for文と組み合わせて使用されます。

数値の入ったリストとは異なり、「一定の規則で値を生み出すオブジェクト」という特徴があります。この仕組みにより、大量の要素を一度にメモリへ展開せずに処理でき、パフォーマンス面で有利に働きます。

ここでは、for文中でのrange関数の基本的な書き方等について見ていきます。リストとの違いも理解していきましょう。

range関数の役割とfor文での処理の流れ

range関数は「整数の連続したシーケンスを生成する」場合に使用する制御構文です。

ななみ

「1,2,3,4,5…」といった連続した整数を生成したい場合に使用します。

range関数は連続した整数を生成するため、リストと同様だと誤解されてしまいますが、実際には「必要になった瞬間に値を一つずつ取り出す」イテラブルです。

ななみ

必要なタイミングで値を生成するため、大量のデータでもメモリを圧迫しないため、メモリ効率が良いとされます。

for 文は、このイテラブルを利用して順次整数を受け取り、ブロック内の処理を繰り返します。処理の流れを基本的な文で確認しましょう。

for x in range(6):
    print(x)

# 出力結果
# 0
# 1
# 2
# 3
# 4
# 5

range(6)と記載した場合は、「0から5までの整数を1つずつカウントアップして生成」します。

  1. range オブジェクトを生成する
  2. for 文が最初の値「0」を取得して処理を実行する
  3. 次の値「1」を取得する
  4. stopの直前の値「5」を処理したらループを終了する

以上がfor文での基本的な処理の流れです。ざっくり理解した所で、range関数の書き方(構文)を見ていきます。

range関数の書き方(start・stop・stepの意味)

rangeの基本的な書き方は「range(stop)、range(start, stop)、range(start, stop, step)」の3種類です。それぞれ用途が異なるため、仕組みを正確に理解する必要があります。

  • start:生成を開始する整数を指定
  • stop:生成を終える整数を指定(ただしstop自体は含まれない)
  • start:値を増減させる間隔を指定

サンプルコードで処理を確認してみましょう。

# 1. range(stop)
for x in range(5):
    print(x)

# 出力結果
# 0
# 1
# 2
# 3
# 4

range(5)と記載した場合は、「0から4までの整数を1つずつカウントアップして生成」します。

ななみ

startを省略した場合は「0」がデフォルト、stepを省略した場合は「1」がデフォルトとして処理されます!つまり、「range(0, 5, 1)」と指定するのと同じ意味になります。

# 2. range(start, stop)
for x in range(2, 6):
    print(x)

# 出力結果
# 2
# 3
# 4
# 5

range(2, 6)と記載した場合は、「2から5までの整数を1つずつカウントアップして生成」します。

ななみ

stepを省略した場合は「1」がデフォルトとして処理されます!つまり、「range(2, 6, 1)」と指定するのと同じ意味になります。

# 3. range(start, stop, step)
for x in range(3, 10, 2):
    print(x)

# 出力結果
# 3
# 5
# 7
# 9

range(3, 10, 2)と記載した場合は、「3から10までの整数を2つずつカウントアップして生成」します。

Pythonの公式ドキュメント:4.3. range関数

終了値stopはシーケンスに含まれない

ここまで確認してきて気づいた方もいるかもしれませんが、range関数では、stopの値が生成される整数に含まれません

たとえば range(1, 5) を使うと生成されるのは 1, 2, 3, 4 であり、5 は含まれないということです。

「指定した回数よりループが1回少ない」や「意図した値が出力されない」という時はstopの値やstepの値を見直してみましょう。

Pythonのfor文でのrange関数を使い方

Pythonのrange関数の基本的な書き方について解説しました。ここからは、実際にfor文ではどのようにrange関数が使用されるのか?を見ていきましょう。

連続した整数の生成、ステップ指定、逆順処理といった代表的な利用方法を丁寧に説明します。

1から10までの連続した整数を生成する

もっとも基本的な例として、1 から 10 までの整数を生成するパターンがあります。

for x in range(1, 11):
    print(x)

# 出力結果
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10

Pythonでは「range(1, 11)」と書くことで 1〜10 を表現できます。stopは生成する整数に含まれないため、11 の直前である 10 が最後の値となります。

この規則を理解することで、指定した範囲を正しく扱えるようになります。実際にコードを書いて実行結果を見てみましょう。

ステップ(step)を指定したカウントアップ

range の第三引数 step を利用することで、整数を任意の間隔で生成できます。

たとえば偶数だけを取得したい場合は「range(2, 11, 2)」を使用します。

for x in range(2, 11, 2):
    print(x)

# 出力結果
# 2
# 4
# 6
# 8
# 10

このようにstepに正の整数を指定すると、start からstopまで、stepの分だけ値が増えていきます。

「stepを指定するとstopを超えない範囲で値が生成される」という点を理解しながら利用しましょう。例えば「range(1, 10, 3)」は 1, 4, 7 のように生成され、10 には到達しません。

逆順ループ(カウントダウン)の書き方

逆順に値を処理したい場合、rangeのstepに負の値を指定します。

たとえば 10 から 1 までを逆順に生成する場合は「range(10, 0, -1)」を使用します。

for x in range(10, 0, -1):
    print(x)

# 出力結果
# 10
# 9
# 8
# 7
# 6
# 5
# 4
# 3
# 2
# 1

ここでstopを「0」と書く理由は、stopは含まれないため「1」を最後の値としたい場合に「0」を指定する必要があるからです。

逆順ループは、ソート済みデータの後方処理やカウントダウン表示など、実用的な場面でも活用されます。負の step を使うときは「start > stop」の関係が必要で、この条件が満たされないとループが1回も実行されない点に注意が必要です。

Pythonのrange関数をListに変換する方法

range関数はリストではなくイテラブルであるため、必要に応じて list() を使ってリスト化することができます。

たとえば「list(range(5))」は [0, 1, 2, 3, 4] のようなリストを返します。リスト化することで、値をそのまま表示したい場合や、複数回利用したい場面で便利になります。

ただし、リスト化するとメモリを消費するため、大量のデータを扱う場合は注意が必要です。range の性質を理解して、状況に応じて使い分けましょう。

rangeはリストではない(イテラブルの仕組み)

range関数は「整数の列挙を遅延評価するイテラブル」であり、必要になったときだけ値が生成されます。

これはリストのように全ての値を一度に保持しないため、メモリ効率が非常に高いという利点があります。

rangeとリストを混同しがちですが、この違いを理解することでプログラムの設計がより合理的になります。イテラブルとしての性質は for 文と非常に相性が良く、繰り返し処理における基本的な動作として重要です。

list(range())でリスト化する

range関数の内容を明示的に確認したい場合や、複数回のアクセスが必要な場合は「list(range())」でリスト化します。

ななみ

リストに変換するとすべての要素がメモリ上に展開され、インデックスアクセスが容易になります。

例えば「list(range(1, 5))」は [1, 2, 3, 4] を返します。

print(list(range(1, 5)))

# 出力結果
# [1, 2, 3, 4]

ただし、大規模な範囲をリスト化するとメモリ消費が増えるため注意が必要です。使い分けとして、単純な繰り返し処理にはrange関数を直接使用し、要素を保持して再利用する場合にリスト化を検討するのが適切です。

Pythonのrange関数で小数点を扱う方法

range関数は整数専用であり、小数点を含む値を直接生成することはできません。この制約は公式仕様として明確に定められています。

しかし、小数点刻みのループ処理が必要なケースは実務でも存在します。ここでは、小数点を扱うための代替手段としてNumPyを利用する方法や、自作関数で実現する方法を紹介します。

浮動小数点floatは指定できない(エラーとなる)

range関数で浮動小数点floatを指定するとエラーが発生します。これはrange関数が整数の増減を前提に設計されているためです。

例えば「range(0.1, 1.0, 0.1)」のような書き方はできません。

range(0.1, 1.0, 0.1)

# 出力結果
# TypeError: 'float' object cannot be interpreted as an integer

小数点のステップを直接扱えない理由は、精度問題と内部処理仕様にあります。この制約を理解することで、不必要なエラーを避け、適切な代替手段を選択できるようになります。

小数を扱いたい場合は、後述の「NumPy」や自作関数を検討しましょう。

NumPyで浮動小数点floatも指定可能

小数点刻みのシーケンスを生成したい場合、NumPyの「arange」や「linspace」を利用すると便利です。

NumPyリファレンス:numpy.arange

たとえば、「numpy.arange(0.1, 0.6, 0.1)」は 0.1 刻みの値を生成できます。

import numpy as np

print(np.arange(0.1, 0.6, 0.1))

# 出力結果
# [0.1 0.2 0.3 0.4 0.5]

標準ライブラリでは実現しづらい小数点ループを NumPy は効率的に提供します。データ分析や科学計算を行う場面では不可欠な手法であり、range の仕様では対応できない処理に有効です。

まとめ:Pythonのrange関数はfor文で活用できる重要な関数

range関数はPythonの繰り返し処理を支える基本要素であり、for 文と組み合わせることで効率的なループ処理が可能になります。

本記事では、range関数の基本仕様から「start・stop・step」の意味、逆順処理、小数点の扱い、イテラブルとしての仕組みなどを総合的に解説しました。

これらを理解することで、Pythonの基礎が確実に身につき、実務レベルのコードにも応用できます。公式ドキュメントを参照しつつ、実際に手を動かしながら習得することで理解が深まります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次