Python range() 関数: Float、List、For ループの例

⚡ スマートサマリー

Python range() は、開始値から終了値まで(終了値自体は含まない)の不変の整数列を生成する組み込み関数で、オプションの step を使用して増分を制御します。

  • 🔘 構文: range(start, stop, step) は最大 3 つの整数引数を受け入れます。start のデフォルト値は 0、step のデフォルト値は 1 です。
  • ☑️ 限定停車地: シーケンスは常に停止インデックスの1つ前の値で停止するため、range(5)は0から4を返します。
  • ステップ制御: 正のステップは値を増加させ、負のステップは逆方向にカウントダウンして逆範囲を示します。
  • 🧪 入力制限: 整数値のみが受け入れられるため、浮動小数点数または文字列を引数として渡すとTypeErrorが発生します。
  • 🛠️ NumPyの浮動小数点数: NumPyのarange()関数は、range()関数の動作を浮動小数点シーケンスに拡張します。
  • 🤖 AIワークフロー: 機械学習コードは、トレーニングエポック、ミニバッチ、ハイパーパラメータグリッドを反復処理するためにrange()関数に依存しています。

Python range() 関数

何ですか Python 範囲?

Python range()は組み込み関数であり、 Python from Python (3.x) は、指定された開始インデックスと終了インデックスに基づいて一連の数値を返します。開始インデックスが指定されていない場合は、インデックスは 0 と見なされ、終了インデックスまで値が 1 ずつ増加します。

例えば、range(5) は 0、1、2、3、4 という値を出力します。 Python range() は非常に便利なコマンドで、主に反復処理を行う必要がある場合に使用されます。 forループ.

構文

range() 関数の構文は以下のとおりです。

range(start, stop, step)

技術パラメータ

  • 開始: (オプション) 開始インデックスは整数であり、指定されない場合、デフォルト値は 0 です。
  • やめる: 停止インデックスは、範囲関数が停止する値を決定します。これは範囲関数への必須入力です。最後の値は常に停止値より1小さくなります。
  • ステップ: (オプション)ステップ値は、範囲内の次の数値を増分する数値です。デフォルトでは1です。

戻り値

戻り値は、指定された開始インデックスから終了インデックスまでの数値のシーケンスです。

Python range() 関数と履歴

Python range()は、 Python バージョン3。それ以前は、xrange() が関数でした。

range() と xrange() はどちらも、数値のシーケンスを生成するために使用されます。

range() と xrange() の違いは以下のとおりです。

範囲() xrange()
range() は数値のシーケンスを与え、数値のリストを返します。 xrange() 関数は、値を取得するために for ループでループする必要があるジェネレーター オブジェクトを提供します。
range() はリストを返します。 xrange() はジェネレータ オブジェクトを返します。
range() メソッドは、返されたリストを保存する必要があるため、xrange() と比較してより多くのメモリを使用します。 xrange() はジェネレーターオブジェクトを返すため、すぐに値を返すわけではなく、値を取得するには for ループ内で使用する必要があります。
大量のデータを扱う場合、メモリ使用量が増えるため、コードの実行速度が低下します。 xrange() を使用すると、コードの実行が高速になります。

range() の使用

この例では、range() を使用して 0 ~ 9 の値を出力する方法を示します。

範囲で使用される値は 10 なので、出力は 0 1 2 3 4 5 6 7 8 9 になります。

開始値が指定されていないため、開始値は0とみなされ、終了値は9まで与えられます。終了値は常に指定された値より1小さい値、つまりstop-1となります。

for i in range(10):
    print(i, end =" ")

出力:

0 1 2 3 4 5 6 7 8 9

range() での start と stop の使用

このコードでは、開始値は3、終了値は10です。開始インデックスは3なので、数値のシーケンスは3から終了値まで続きます。シーケンスの最後の値は、終了値より1小さい値、つまり10-1=9になります。

for i in range(3, 10):
    print(i, end =" ")

出力:

3 4 5 6 7 8 9

スタート、ストップ、ステップの使用

開始値は3なので、数列は3から始まります。停止値は10なので、数列は(10-1)、つまり9で停止します。ステップは2なので、数列の各値は2ずつ増加します。ステップ値が指定されていない場合、ステップの値はデフォルトで1になります。

for i in range(3, 10, 2):
    print(i, end =" ")

出力:

3 5 7 9

これまで、range() 関数が指定された停止値に対して増加値を返す方法を見てきました。次に、指定された範囲内で減少値を取得する例を試してみましょう。

範囲内の値を正のステップで増加させる

range() 関数の step パラメータを使用すると、値を増減させることができます。デフォルトでは正の値である 1 が設定されているため、常に増分された値が得られます。

出力として増分値が必要な場合は、ステップ値は正の値でなければなりません。

for i in range(1, 30, 5):
    print(i, end =" ")

出力:

1 6 11 16 21 26

Reverse 範囲: 負のステップを使用して値を減少させる

range() 関数の step パラメータに負の値を指定すると、値を減少させることができます。以下の例では、step の値が負なので、出力は指定された range の値から減少します。

for i in range(15, 5, -1):
    print(i, end =" ")

出力:

15 14 13 12 11 10 9 8 7 6

開始値は15、停止値は5、ステップ値は負の数、つまり-1です。上記の入力値の場合、range()関数は15から停止値に達するまで値を減少させますが、ここでは最後の値が停止値+1になるという違いがあります。

浮動小数点数の使用 Python 範囲()

ここで、浮動小数点数を使用して range() を実行してみましょう。

例:

for i in range(10.5):
    print(i, end =" ")

上記の例では、ストップ値を10.5に設定しました。

出力は次のとおりです。

Traceback (most recent call last):
  File "python_range.py", line 1, in <module>
    for i in range(10.5):
TypeError: 'float' object cannot be interpreted as an integer

Python range() 関数は、開始、停止、ステップに浮動小数点数をサポートしていないため、エラーが発生します。

forループの使用 Python 範囲()

この例では、数値の配列を使用し、range() 関数を使って for ループ内で配列を反復処理する方法を見ていきます。

例:

arr_list = ['Mysql', 'Mongodb', 'PostgreSQL', 'Firebase']

for i in range(len(arr_list)):
    print(arr_list[i], end =" ")

出力:

MysqlMongodb PostgreSQL Firebase

上記の例では、停止値として len(arr_list) を使用しています。for ループは停止値、つまり配列の長さまで反復します。arr_list には 4 つの項目があるため、停止値は 4 になります。開始値は 0、ステップは 1 なので、値は 0 から始まり、3 で停止します。つまり、配列の長さ - 1、4 - 1 = 3 となります。

使い方 Python リストとしてのrange()

この例では、range からの出力をリストとして利用する方法を示します。

例:

print(list(range(10)))

出力:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

出力がリスト形式であることがわかります。 range() をループする必要はなく、list() メソッドを使用して出力を range 形式から list 形式に直接変換できました。

Python range()での文字の使用

これまで、Python の range() で整数を使用してきました。また、浮動小数点数は Python の range ではサポートされていないことも確認しました。文字を使用した場合に何が起こるか、出力を確認してみましょう。

例:

for c in range ('z'):
        print(c, end =" ")

出力:

Traceback (most recent call last):
  File "python_range.py", line 1, in <module>
    for c in range ('z'):
TypeError: 'str' object cannot be interpreted as an integer

文字列を整数として解釈できないというエラーがスローされます。

アルファベットのリストを取得するには、コードをカスタマイズして、以下に示すように目的の出力を取得します。

例:

def get_alphabets(startletter, stopletter, step):
    for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
        yield chr(c)

print(list(get_alphabets("a", "h", 1)))

出力:

['a', 'b', 'c', 'd', 'e', 'f', 'g']

範囲要素にアクセスする方法

for ループを使用して範囲から値を取得したり、インデックスを使用して range() の要素にアクセスしたりできます。

forループの使用

例:

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

出力:

0
1
2
3
4
5

インデックスの使用

インデックスは範囲とともに使用され、その位置で利用可能な値を取得します。 範囲値が 5 の場合、開始値を取得するには、range(5)[0] と次の値 range(5)[1] などを使用できます。

例:

startvalue = range(5)[0] 
print("The first element in range is = ", startvalue) 

secondvalue = range(5)[1] 
print("The second element in range is = ", secondvalue) 

lastvalue = range(5)[-1]
print("The first element in range is = ", lastvalue)

出力:

The first element in range is =  0
The second element in range is =  1
The first element in range is =  4

list() の使用

このメソッドは、range() のすべての要素を出力します。 list() を使用すると、 range() からの要素をリスト形式で返します。

例:

print(list(range(10)))

出力:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

指定された範囲のリスト出力が得られます。

例: range() を使用して偶数を取得する

range() 関数を使うと、入力として指定された範囲内の偶数のリストを取得できます。range() 関数のパラメータは、start が 2、stop が 20、step が 2 なので、値は 2 ずつ増加し、stop-2 までの偶数が得られます。

例:

for i in range(2, 20, 2):
    print(i, end =" ")

出力:

2 4 6 8 10 12 14 16 18

XNUMX つの range() 出力のマージ

この例では、itertoolsモジュールのchain()関数を使用して、2つのrange()関数を連結します。

例:

from itertools import chain

print("Merging two range into one")
frange =chain(range(10), range(10, 20, 1))
for i in frange:
    print(i, end=" ")

出力:

Merging two range into one
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

NumPy での range() の使用

NumPyモジュールには、range()と同様の動作と出力結果を提供するarange()関数があります。arange()はrange()と同じ引数を受け取ります。

構文:

arange(start, stop, step)

NumPyを使用するには、以下の手順に従ってください。

ステップ 1: NumPy モジュールをインポートします

import numpy

実行中に「numpyモジュールが見つかりません」というエラーが表示された場合は、手順2に示すようにモジュールをインストールする必要があります。

ステップ 2NumPyをインストールしてください。

pip install numpy

ステップ 3: NumPy を使用した arange() の動作例

import numpy as np

for  i in np.arange(10):
   print(i, end =" ")  

出力:

0 1 2 3 4 5 6 7 8 9

NumPy arange() を使用した浮動小数点数

range() 関数では浮動小数点数列を取得することはできませんが、NumPy の arange() 関数を使用すれば可能です。

例:

必要な範囲は0.5から1.5です。値は0.2ずつ増加します。

import numpy as np

for  i in np.arange(0.5, 1.5, 0.2):
   print(i, end =" ")  

出力:

0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998

出力結果は少し奇妙です。浮動小数点数の一部が小数点以下16桁で表示されます。これは、10進浮動小数点数を2進数形式で格納する際の複雑さが原因です。必要に応じて値を丸め、必要な小数点以下の桁数に制限することもできます。

よくあるご質問

In Python 3. range() は、リストではなく、遅延評価される不変の範囲オブジェクトを返します。数値は必要に応じて生成されます。実際のリストが必要な場合は、list(range(n)) でラップしてください。 Python 2 は完全なリストを返しました。

停止値は排他的であるため、range(len(items)) はゼロベースのインデックスにきれいにマッピングされます。終点を含めるには、停止値に 1 を加えます。たとえば、range(1, 11) は 1 から 10 までをカウントします。

いいえ。range(0, 10, 0) を呼び出すと ValueError: range() の引数 3 はゼロであってはなりません。ゼロのステップでは停止値に到達できず、無限ループに陥ってしまうためです。代わりに正または負のステップを使用してください。

range() は浮動小数点数を拒否しますが、リスト内包表記で整数をスケーリングできます。[x * 0.5 for x in range(0, 6)] は 0.0 から 2.5 を生成します。これにより、NumPy をインポートせずにステップ実行が可能になります。ping 小数値まで。

はい。範囲オブジェクトは開始値、終了値、ステップ値のみを格納するため、range(1000000)はrange(10)と同じごくわずかな定数メモリを使用します。値は反復処理中に1つずつ計算されます。

in 演算子を使用します: 5 in range(0, 10) は True を返します。範囲オブジェクトの場合、 Python このメンバーシップテストは、すべての要素をスキャンするのではなく、高速な算術演算によって定数時間で実行されるため、非常に大きな範囲でも効率的です。

機械学習コードでは、range() 関数を使用してトレーニングエポックをループ処理したり、ミニバッチを反復処理したり、ハイパーパラメータグリッドを構築したりします。NumPy の arange() と linspace() は、AI 実験でよく用いられる学習率スケジュールや閾値スイープのための浮動小数点範囲にこの機能を拡張します。

はい。GitHub CopilotのようなAIコーディングアシスタントは、コメントや関数名からrange()ベースのループを自動補完し、エージェントツールはインデックスループをよりクリーンなenumerate()や内包表記パターンにリファクタリングできますが、生成された境界は簡単に確認する必要があります。