怎樣去使用Python的xrange和range
在Python裡面,有兩個非常簡便的方法去構造列表,或者去用於構造整數迴圈,這兩個方法就是xrange和range,也許你已經猜到了。
下面我們就來說說兩者的不同之處。
開始之前,我們先來討論一下xrange和range的區別。
在大多數情況下,xrange和range的功能是完全相同的,他們都提供可迭代的整數列表。唯一的區別是range返回的是list物件,而xrange返回的是xrange物件。
這是什麼意思呢?這是個好問題!這意味著xrange在執行時並不像range那樣生成靜態的列表,它通過呼叫類似yield的特殊技術來建立你需要的值,這種技術與generators物件一起使用。如果你想了解更多關於generators和yield關鍵字,請閱讀這篇文章:
好了,那上面提的是什麼意思呢?意思就是在當你需要生成一個巨大的列表時,比如說十億,用xrange將是一個好的方法。尤其是當你需要在記憶體比較小的系統上面跑程式碼的時候,比如手機上面,range將會耗費大量的記憶體去建立這個整數陣列。那也許會導致MemoryError或者程式崩潰。
雖然上面那樣說了,但是當你需要多次去使用一個列表的時候,也許使用range會更好,這是因為xrange在每次去索引的時候都需要去迭代的生成一系列整數物件,因為range是靜態生成的,所以只需要建立一次。
好了,乾貨來了。
怎樣去使用Python中的range和xrange
那我們到底該怎樣去使用range和xrange呢?下面給出一些例子:
>>> for i in xrange(10):
... print(i)
...
0
1
2
3
4
5
6
7
8
9
好的,例子雖然簡單但是已經足夠了,上面xrange的用法同樣適用於xrange,但是我個人覺得xrange更好,也許是由於性感的“x”在前面吧。
解釋一下吧,xrange和range總共可以接受三個引數,但是其中的兩個是可選的,這些引數分別是:”start”,”stop”和”step”,“start”表示的是你的列表的開始,“stop”指的是你的列表的結束數,“step”指的是你的列表元素每次的增量。
用Python的xrange和range來生成奇數
我只需要奇數,那兒是一些方法可以實現:
>>> for i in xrange(1, 10, 2):
... print(i)
...
1
3
5
7
9
我指定python的第一個元素是1,最後一個元素是10,並且每個元素的增量是2,真的很簡單。
用Python的xrange和range生成負數
想想,我們該怎樣生成負數的列表呢?
下面是一個簡單的例子:
>>> for i in xrange(-1, -10, -1):
... print(i)
...
-1
-2
-3
-4
-5
-6
-7
-8
-9
我們通過改變“start”,“stop”,“step”來生成負數,請注意的是想生成負數列表,那麼你必須這麼做,像xrange(-10)這樣的方法將不能達到目的,因為range和xrange的預設“step”是1。
其他一些在Python中使用range和xrange的例子
下面是生成100到120之間的偶數的例子:
>>> for i in xrange(100, 120, 2):
... print(i)
...
100
102
104
106
108
110
112
114
116
118
這就是range和xrange,如果你想了解更多關於這兩個函式的知識,請參照python的xrange和range文件
如果你傳入的“start”比“stop”大,那麼將返回一個空的列表,如果“step”比“stop”與“start”的差大,那麼“stop”的值將會被增大到“step”,且返回的列表中只包含“start”一個元素。
下面的一些例子將使你更清楚:
>>> for i in xrange(70, 60):
... print(i)
...
# Nothing is printed
>>> for i in xrange(10, 60, 70):
... print(i)
...
10
棄用python中的xrange
再多說一點,在python3.x中,xrange函式已經不復存在了,python3.x中的range就是python2.x中的xrange。因此為了你的程式碼的可移植性,可能你就需要堅持使用range,當然,你也可以使用python2轉python3工具來轉換你的程式碼,但是這又帶來了額外的麻煩。
xrange被刪去的原因是想讓人們更好的去使用它,並且這種影響可以忽略不計。也就是說python3.x中的range就是python2.x中的xrange。
你能在PEP文件中找到去掉xrange的原因。
好了,到這裡就結束了,騷年。
原版英文文件參見:http://pythoncentral.io/how-to-use-pythons-xrange-and-range/
本文固定連線:http://blog.dreamchasinger.cn/?p=606
歡迎訪問我的自建部落格:http://blog.dreamchasinger.cn/