1. 程式人生 > >range 和xrange

range 和xrange

range([start,] stop[, step]),根據start與stop指定的範圍以及step設定的步長,生成一個序列。

比如:

>>> range(5)
[01234]
>>> range(1,5)
[1234]
>>> range(0,6,2)
[024]

xrange 用法與 range 完全相同,所不同的是生成的不是一個list物件,而是一個生成器

>>> xrange(5)
xrange
(5)//乃生成器
>>> list(xrange(5))
[01234]
>>> xrange(1,5)
xrange(15)
>>> list(xrange(1,5))
[1234]
>>> xrange(0,6,2)
xrange(062)
>>> list(xrange(0,6,2))
[024]

由上面的示例可以知道:要生成很大的數字序列的時候,用xrange會比range效能優很多,因為不需要一上來就開闢一塊很大的記憶體空間。

xrange 和 range 這兩個基本上都是在迴圈的時候用。

1 for in range(0100):
2 print i
3
4 for in xrange(0100):
5 print i

這兩個輸出的結果都是一樣的,實際上有很多不同,range會直接生成一個list物件:

1 = range(0,100)
2 print type(a)
3 print a
4 print a[0], a[1]

輸出結果:

1 <type 'list'>
2 [012
3456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899]
3 0 1

而xrange則不會直接生成一個list,而是每次呼叫返回其中的一個值:所以省記憶體

1 = xrange(0,100)
2 print type(a)
3 print a
4 print a[0], a[1]

輸出結果:

1 <type 'xrange'>
2 xrange(100)
3 0 1