Pythonの繰り返し処理で出てくる「range」と「xrange」ですが、何が違うかみていきたいと思います!
range
例文で、以下のようなコードをよく目にするかと思います。
for i in range(10): print i
rangeがリストを生成して繰り返し処理をする仕組みですが、どのようなデータを生成されるか以下のコードを実行してみるとよくわかります(*´ω`*)b
print range(10)
すると以下のように、、、
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
rangeで指定した範囲の「リスト」を生成しています(*´ω`*)
っということは!!
100万回繰り返そうとすると、100万個の要素を持ったリストがメモリ上に生成されます。非常に大きなリストなので、メモリを大きく圧迫してしまう可能性があります、、、(´・ω・`)
そこで登場するのが、xrangeです!
xrange
xrangeを使う場合は、rangeと特に変わりなく使うことができます。
for i in xrange(10): print i
rangeと同様に、printを使ってxrangeの部分だけ見てみます。
print xrange(10)
すると、、、
xrange(10)
何やらrangeと違うものが出力されました! xrangeでは、xrangeオブジェクトと言うものが生成されます。
print type(xrange(10)) <type 'xrange'>
xrangeは、リストを作らずに必要に応じて値を作ってくれます。巨大なリストを作成しないので、メモリを圧迫しないっということですね!(*´ω`*)
ただ、利点は微々たるもので、処理がメチャメチャ早くなるといったことは無いように感じます(;´∀`)
繰り返し処理が、途中でbreakする事が多い場合や、メモリを圧迫するほど重たい処理の場面でxrangeを使うと、効率がいいよー!という感じで使っています(`・ω・´)ゞ