2010年6月9日 星期三

Python:range 與 xrange 的不同

 
看了以下的例子便可明白,range 創造了一個 list ,
再從 list 中取值。而 xrange 則創造了一個對象來直接取值。
 
假如在 loop 中使用,xrange 效率會好很多。
 
 
>>> aaa=range(0,10,2)
 
>>> print aaa
[0, 2, 4, 6, 8]

>>> aaa
[0, 2, 4, 6, 8]
 
>>> help(range)
Help on built-in function range in module __builtin__:
 
range(...)
range([start,] stop[, step]) -> list of integers

Return a list containing an arithmetic progression of integers.
range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
When step is given, it specifies the increment (or decrement).
For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
These are exactly the valid indices for a list of 4 elements.
 
 
>>> bbb=xrange(0,10,2)
 
>>> print bbb
xrange(0, 10, 2)
 
>>> bbb
xrange(0, 10, 2)
 
>>> help(xrange)
Help on class xrange in module __builtin__:
 
class xrange(object)
 | xrange([start,] stop[, step]) -> xrange object
 | 
 | Like range(), but instead of returning a list, returns an object that
 | generates the numbers in the range on demand. For looping, this is
 | slightly faster than range() and more memory efficient.
 | 
 | Methods ........................
 
最後,留意一下它們的不同。

>>> range(5)
[0, 1, 2, 3, 4]
>>> range(2,5)
[2, 3, 4]
>>> range(0,15,2)
[0, 2, 4, 6, 8, 10, 12, 14]
>>> xrange(5)
xrange(5)
>>> xrange(2,5)
xrange(2, 5)
>>> xrange(0,15,2)
xrange(0, 16, 2)
>>> range(5),range(3,10)
([0, 1, 2, 3, 4], [3, 4, 5, 6, 7, 8, 9])
>>> xrange(5),xrange(2,5)
(xrange(5), xrange(2, 5))
 
 
  
 

沒有留言: