PR

【Python】range関数の使い方を1からわかりやすく解説

Python

range関数は、Pythonで特定の範囲の整数のシーケンスを生成するために使用される組み込み関数です。

参考 関数とは?

range(stop)
range(start, stop[, step])

シーケンスとは、プログラミングにおける特定のデータ構造の一種で、順序付けられた要素の集合を指します。Pythonでは、文字列(str)、リスト(list)、タプル(tuple)などがシーケンス型に含まれます。

参考 Pythonデータ構造の基本

このページではPythonのrange関数の使い方・構文ルールや注意点を、サンプルコード付きで1からわかりやすく解説します。

このページで学べる内容
  • range関数の使い方・構文ルール
  • range関数を利用する際の注意点

Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。

参考 Pythonの基本的な構文ルール・書き方

スポンサーリンク

Python:range関数の基本

Pythonのrange関数の基本的な構文は以下の通り。

range(stop)
range(start, stop[, step])
range関数の引数
  • start:シーケンスを始める整数を指定。この引数が省略されると、startのデフォルト値は0になる。
  • stop:シーケンスを終了する整数を指定する。stopの値自体はシーケンスに含まれない。→「stop - 1」がシーケンスの最後の値になる。
  • step:シーケンス中の数値間の差を指定。この引数が省略されると、stepのデフォルト値は1になる。負の値を指定すると、逆順のシーケンスが生成されます。

range関数のツボは「引数」の指定にあります。1つ1つ、引数の意味をしっかり理解することが重要です。

以下のサンプルコードをご覧ください。

# startを指定せず、stopだけを指定した場合
for i in range(5):
    print(i)  # 0から4までの整数を順に出力します

# startとstopを指定した場合
for i in range(2, 5):
    print(i)  # 2から4までの整数を順に出力します

# start、stop、stepを全て指定した場合
for i in range(2, 9, 2):
    print(i)  # 2から8まで、2つずつスキップする整数を順に出力します

参考 Python:for文 / print関数

ご覧のように、指定する引数によって出力される数値が異なります。Pythonプログラミングに慣れていない方にとっては少々ややこしく直感的に理解できない部分かもしれませんが、上記のサンプルを見ながら丁寧に学習しておきましょう。

range関数は組み込み関数

組み込み関数とは、Pythonにデフォルトで組み込まれている関数のこと。これらの関数は追加のインポート操作なしに、いつでもどこでも利用可能です。したがって、range関数もPythonをインストールすればすぐに利用可能です。

Pythonの標準ライブラリには、多くの便利な組み込み関数が含まれています。

主な組み込み関数
  • print(): 引数として与えられた値を標準出力(通常はコンソール)に表示します。
  • len(): コレクション(リストやタプル、辞書、セット、文字列など)の要素数を返します。
  • max(), min(), sum(): 数値のリストやタプルなどから、それぞれ最大値、最小値、合計値を返します。

これらの組み込み関数は、日常的なプログラミングタスクを容易にするための基本的なツールとして用いられます。これらの関数はPythonの重要な部分を形成しており、Pythonプログラムのあらゆる部分で頻繁に使われます。

Python:range関数を利用するメリット

それではrange関数の仕組みを詳しく見ていきながら、利用する際の利点を学習していきましょう。

それぞれ1つずつサンプルコードを用いながらわかりやすく解説します。

Python:range関数の利点① 一定回数の繰り返しを容易に実装できる

利点の1つ目。特定の回数だけ処理を繰り返すというシンプルなタスクを簡単にコーディングできるという点です。

たとえば、5回"Hello, World!"を出力したい場合、次のようにrange関数を使用します。

for i in range(5):
    print("Hello, World!")  # "Hello, World!"を5回出力します

for文は指定したシーケンスの数だけ繰り返し処理を行いますが、range関数を利用することで任意の数だけ繰り返し実行させるという制御が可能になります。

Python:rangeの利点② 範囲指定のループが簡単

特定の範囲内でループを回したい場合にも、range関数が非常に役立ちます。下記のコードは1から10までの数値を出力します。

for i in range(1, 11):
    print(i)  # 1から10までの整数を順に出力します

Python:range関数の利点③ 任意のステップ数でループを回すことが可能

range関数の3つ目のパラメータであるstepを使うと、指定したステップ数ごとにループを回すことができます。

以下の例では、2から20までの偶数を出力します。

for i in range(2, 21, 2):
    print(i)  # 2から20までの偶数を順に出力します

Python:range関数の利点④:メモリ効率

range関数は「遅延評価」または「怠惰評価」(lazy evaluation)を使用しています。

つまり、全ての数値を一度に生成するのではなく、各ステップごとに一つずつ生成します。このため、非常に大きな範囲の数値を扱う場合でも、メモリを効率的に利用することができます。

for i in range(10**12):
    pass  # これは巨大な範囲を表現しますが、メモリ上には実際には一度に一つの値しか存在しません

Python:range関数の利点⑤:逆順のシーケンス生成

ステップに負の数を指定することで、逆順のシーケンスを生成することが可能です。以下の例では、10から1までの数値を逆順に出力します。

for i in range(10, 0, -1):
    print(i)  # 10から1までの整数を逆順に出力します

以上がrange関数の主な利点です。

range関数の利点を用いたサンプルコードをいくつか記載しておきます。

サンプル FizzBuzz問題の解決

FizzBuzzはプログラミングの世界でよく使われる簡単な問題です。1から100までの数をプリントするプログラムを書きます。ただし3の倍数のときは数の代わりにFizzを、5の倍数のときはBuzzを、3と5両方の倍数の場合にはFizzBuzzをプリントするという処理です。

for i in range(1, 101):
    output = ""
    if i % 3 == 0:
        output += "Fizz"
    if i % 5 == 0:
        output += "Buzz"
    print(output if output else i)  # 3の倍数、5の倍数、15の倍数に対応したメッセージを出力します

参考 変数の使い方 / 代入演算子 / 比較演算子 / if文

サンプル 逆順のアルファベットを出力

アルファベットの逆順を出力します。アスキーコードを利用して、大文字のアルファベットを生成します。

for i in range(90, 64, -1):  # 大文字アルファベットのASCII値は65から90
    print(chr(i))  # ZからAまでを出力します

これらのプログラムは、range関数のいくつかの特性(一定回数の繰り返し、任意のステップ数でのループ、逆順のシーケンス生成)をうまく活用しています。

range関数を利用する際の注意点

最後にrange関数を利用する際の注意点を整理しておきましょう。

注意点1 引数は整数である必要がある

range関数は、整数のみを引数として受け取ります。小数や非整数値を引数にすることはできません。また、引数は必ずしも正である必要はありませんが、無限大を表すfloat('inf')float('-inf')は許可されません。

# 小数の場合
try:
    for i in range(0, 5.5):  # 小数を引数に取るとエラーが発生します
        print(i)
except TypeError as e:
    print(f"Error: {e}")  # "Error: 'float' object cannot be interpreted as an integer" を出力します

注意点2 終点の値は含まれない

range関数は、始点の値から終点の値の一つ前までの範囲を生成します。つまり、終点の値自体はシーケンスに含まれません。これは0-indexedのプログラミング言語における一般的な慣例です。

for i in range(1, 5):
    print(i)  # 1, 2, 3, 4 を出力します。5 は出力されません

注意点3 始点と終点を逆にしない

range関数の始点が終点より大きい場合、生成されるシーケンスは空になります(ステップが負でない限り)。もし逆順のシーケンスが必要な場合は、始点と終点を逆にし、ステップを負の値にする必要があります。

for i in range(5, 1):
    print(i)  # 何も出力されません。始点が終点より大きいため、範囲は空です

注意点4 大きな値を扱うときの注意

range関数は遅延評価を行うため、非常に大きな範囲でも安全に使用できます。

しかし、それを直接リストなどの他のデータ構造に変換しようとすると、その分のメモリが必要になります。そのため、大規模な範囲を扱う場合は、可能な限りrangeオブジェクトを直接操作することが推奨されます。

# range関数自体は大きな値でも問題ありません
for i in range(10**18):
    if i > 100:  # 出力が長くならないように制限します
        break
    print(i)  # 0から100までを出力します

# しかし、大きな範囲を直接リストに変換しようとすると問題が生じます
try:
    big_list = list(range(10**18))
except MemoryError as e:
    print(f"Error: {e}")  # メモリ不足エラーが発生します

これらの注意点を理解しておくと、range関数をより適切に使用することができるでしょう。

Python:range関数のまとめ

Python:range関数のまとめ
  • 基本的な使い方
    • range(stop): 0から始まり、stopの値まで(stopは含まず)1ずつ増えるシーケンスを生成します。
    • range(start, stop): startから始まり、stopの値まで(stopは含まず)1ずつ増えるシーケンスを生成します。
    • range(start, stop, step): startから始まり、stopの値まで(stopは含まず)stepずつ増減するシーケンスを生成します。
  • メリット
    • 一定回数の繰り返しを容易に実装できる。
    • 範囲指定のループが簡単。
    • 任意のステップ数でループを回すことが可能。
    • メモリ効率が良い(遅延評価を利用)。
    • 逆順のシーケンス生成が可能。
  • 注意点
    • 引数は整数である必要があり、小数や非整数値を引数にすることはできない。
    • 終点の値は含まれない。
    • 始点が終点より大きい場合、生成されるシーケンスは空になる(ステップが負でない限り)。
    • 非常に大きな範囲でも安全に使用できるが、大規模な範囲を直接リストなどの他のデータ構造に変換しようとすると、その分のメモリが必要になる。

始めてPythonを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。

Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!

読者料典 Python入門:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
Python
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました