今日のチュートリアルでは、Pythonのxrange()メソッドについて説明します。
xrange()` メソッドは Python 2.x バージョンでのみ使用可能で、ループの中でシーケンスをトラバースまたは反復するために使用されます。
Python xrange() メソッドの基礎知識
Python の xrange()
メソッドは、ループ処理によく使われる不変のシーケンスである xrange
型のオブジェクトを返します。
これらのオブジェクトはほとんど動作せず、インデックス作成、反復処理、そして len()
関数をサポートするだけです。
xrange (start, stop[, step])
|
ここで
- start(オプション) は、シーケンスの生成を開始する始点です。これはシーケンスに含まれ、言及されない場合はデフォルトで0に設定されます。
- stop は,シーケンスの生成を停止する番号です(排他的).
- step(オプション) は,シーケンス生成時や繰り返し実行時に必要なステップジャンプを指定します.デフォルトは1である.
この記事もチェック:Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説
Python の xrange() メソッドを利用する
では、実際にPythonの xrange()
メソッドをどのように使うか、いろいろと見てみましょう。
1. stop パラメータのみを指定した場合
stepと
startの2つのパラメータは、それぞれデフォルト値が 1 と 0 であるため、省略可能です。
したがって、stopパラメータを指定するだけで Python の
xrange()` メソッドを使用することができます。
stop だけを指定すると、 xrange()
関数はステップ 1 で 0 から (stop-1) までのシーケンスを作成します。
以下の例を見てください。
# xrange() with only stop parameter x = xrange ( 4 )
print "Type of returned object = " , type (x)
print "Sequence generated by xrange() 1 parameter: " , list (x)
|
を出力します。
Type of returned object = < type 'xrange' >
Sequence generated by xrange () 1 parameter: [ 0 , 1 , 2 , 3 ]
|
ここで、このメソッドが生成するシーケンスの型は、先にも述べたように xrange
型です。
xrange()` の出力をリストにタイプキャストすると、0から3(4-1)までの値からなるリストが得られ、その中にステップ1が含まれます。
2. start と stop パラメータ付き
同様に、Pythonの xrange()
メソッドに2つのパラメータを付けて使用することもできます。
この場合、デフォルトでは step
は値 1 となります。
# xrange() with start & stop parameters x = xrange ( 2 , 9 )
print "Type of returned object = " , type (x)
print "Sequence generated by xrange() 2 parameters: " , list (x)
|
結果は以下の通りです。
Type of returned object = < type 'xrange' >
Sequence generated by xrange () 2 parameters: [ 2 , 3 , 4 , 5 , 6 , 7 , 8 ]
|
上の出力からわかるように、今回の Python xrange
オブジェクトは 2(start) から 8(stop-1) までの値を含み、デフォルトの step は 1 です。
3. start, stop, stop の全ての値を指定した場合
全てのパラメータを記載した場合、Pythonの xrange()
関数は先ほどのケースと同様に、startからstop-1までの値を持つ xrange
オブジェクトを返します。
しかし今回は、ある要素から別の要素へのジャンプは、渡された step
と同じになります。
下の例をよく見てください。
ここでは、stepを5、startを5、stopを40としています。
# xrange() with 3 parameters x = xrange ( 5 , 40 , 5 ) #positive step
y = xrange ( 9 , 1 , - 1 ) #negative step
print "Sequences generated for 3 parameters by xrange"
print "x : " , list (x)
print "y : " , list (y)
|
結果は以下の通りです。
Sequences generated for 3 parameters by xrange
x : [ 5 , 10 , 15 , 20 , 25 , 30 , 35 ]
y : [ 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 ]
|
出力から、シーケンスは5から39(40-1)までの値で生成されていることがわかる。
最後の要素については、40が「stop-1」マークを超えているため、考慮されません。
Python の xrange() をループで使う
先に述べたように、Python 2 では xrange()
は for
ループ構造で広く使われています。
例えば、以下のコードでは、数 10 のテーブルを表示しようとしています。
# using xrange in loops print "Table of 10: "
for i in xrange ( 10 , 101 , 10 ):
print i
|
結果は以下の通りです。
Table of 10 :
10 20 30 40 50 60 70 80 90 100 |
ここでは、start=10
, stop=101
, step=10
と記述しています。
100(100-1) の要素を含むようにしたいので、stop は 101 と見なされます。
見ての通り、10から100までのすべての10の倍数が得られます。
したがって、出力は正当化されます。
Python xrange() vs range()
通常、 xrange()
は Python 3.x では利用できないため、Python 2.x 向けにのみコードを設計したい場合にのみ使用されます。
Python 3 では、 range()
メソッドが xrange()
メソッドに取って代わります。
この2つの関数の大きな違いは、どちらも異なるプロパティを持つ異なるオブジェクトを返すことです。
xrange()メソッドは
xrange` オブジェクトを返します。
このオブジェクトはイミュータブルなシーケンスで、先にも述べたように反復処理、インデックス付け、len 関数のみをサポートします。
一方、 range()
メソッドはリストを返します。
このリストはスライスやpop()などの主要な関数をサポートしています。
# xrange() vs range() x = xrange ( 1 , 10 )
y = range ( 1 , 10 )
print "Type(x) = " , type (x)
print "Type(y) = " , type (y)
|
結果は以下の通りです。
結果は以下の通りです。
Type (x) = < type 'xrange' >
Type (y) = < type 'list' >
|
さらに、 xrange
オブジェクトは、格納する値の範囲に依存せず、かなり一定のメモリサイズを必要とするため、空間の複雑さを最小限に抑えたコードを構築する必要がある場合に有用です。
Python 2 と 3 の両方で実行できるプログラムを書きたい場合は、 range()
メソッドを使用するのがより理にかなっており、推奨されます。
まとめ
この記事では、Pythonの xrange()
メソッドの動作と使用方法について理解しました。
さらに質問がある場合は、下のコメント欄で気軽に質問してください。
参考文献
- Python の range() メソッド。
- Python 2.Xのrange関数とxrange関数の違いは何ですか?- StackOverflowの質問です。