Pythonのxrange関数の使い方やrange関数との違いを解説する

スポンサーリンク

今日のチュートリアルでは、Pythonのxrange()メソッドについて説明します。

xrange()` メソッドは Python 2.x バージョンでのみ使用可能で、ループの中でシーケンスをトラバースまたは反復するために使用されます。

スポンサーリンク

Python xrange() メソッドの基礎知識

Python の xrange() メソッドは、ループ処理によく使われる不変のシーケンスである xrange 型のオブジェクトを返します。

これらのオブジェクトはほとんど動作せず、インデックス作成、反復処理、そして len() 関数をサポートするだけです。

xrange(start, stop[, step])

ここで

  • start(オプション) は、シーケンスの生成を開始する始点です。これはシーケンスに含まれ、言及されない場合はデフォルトで0に設定されます。
  • stop は,シーケンスの生成を停止する番号です(排他的).
  • step(オプション) は,シーケンス生成時や繰り返し実行時に必要なステップジャンプを指定します.デフォルトは1である.

Python の xrange() メソッドを利用する

では、実際にPythonの xrange() メソッドをどのように使うか、いろいろと見てみましょう。

1. stop パラメータのみを指定した場合

stepstartの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の質問です。
タイトルとURLをコピーしました