技術原理:Python中range和xrange對比
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/zhaobryant/article/details/42720629
在本文,我們將對Python中range和xrange進行對比分析。
range
函式說明:range([start,] stop [, step]),其根據start與stop指定的範圍以及step設定的步長,生成一個序列。
range示例:
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(1,5)
[1, 2, 3, 4]
>>> range(0,6,2)
[0, 2, 4]
xrange
函式說明:xrange([start,] stop [, step]),其用法與range完全相同,不同的是生成的不是一個陣列,而是一個生成器。
xrange示例:
>>> xrange(5)
xrange(5)
>>> list(xrange(5))
[0, 1, 2, 3, 4]
>>> xrange(1,5)
xrange(1, 5)
>>> list(xrange(1,5))
[1, 2, 3, 4]
>>> xrange(0,6,2)
xrange(0, 6, 2)
>>> list(xrange(0,6,2))
[0, 2, 4]
結論
由上面的示例可以知道:要生成很大的數字序列的時候,用xrange會比range效能優很多,因為不需要一上來就開闢一塊很大的記憶體空間。
對於range和xrange,它們基本上都是在迴圈的時候使用:
for i in range(0, 100):
print i
for i in xrange(0, 100):
print i
這兩個輸出的結果都是一樣的,實際上有很多不同,range會直接生成一個list物件:
a = range(0,100)
print type(a)
print a
print a[0], a[1]
輸出結果:
<type `list`>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
0 1
對於xrange,則不會直接生成一個list,而是每次呼叫返回其中的一個值:
a = xrange(0,100)
print type(a)
print a
print a[0], a[1]
輸出結果:
<type `xrange`>
xrange(100)
0 1
因此,xrange做迴圈的效能比range好,尤其是返回資料量很大的時候。因此,儘量使用xrange吧,除非需要返回一個列表。
下面,我們做這樣一個對比實驗:
from time import time
t1 = time()
x = 1
for i in range(10000000):
x = x+1
print time()-t1
t2 = time()
for i in xrange(10000000):
x = x+1
print time()-t2
其輸出結果為:
1.7990000248
1.48600006104
可見,使用xrange的效能較range有一定程度的提升。
相關文章
- Python中range和xrange的區別Python
- Python學習系列之 xrange和range的區別!Python
- golang for range 遍歷 對比 PHP、pythonGolangPHPPython
- 容器技術和虛擬機器技術的對比虛擬機
- Hyperledger Fabric和FISCO BCOS技術對比
- [精華] RDMA技術原理分析、主流實現對比和解析
- Oracle、NoSQL和NewSQL 資料庫技術對比OracleSQL資料庫
- Oracle、NoSQL和NewSQL 資料庫技術對比(一)OracleSQL資料庫
- python中__init__ 和__new__的對比Python
- SAP Commerce Accelerator和SAP Spartacus的技術對比
- Python 和 Ruby 的對比Python
- Oracle、NoSQL和NewSQL 資料庫技術對比(二)- 終結OracleSQL資料庫
- range方法在Python2和Python3中的不同Python
- 大型資料庫中跨shard查詢使用的技術對比資料庫
- SQL Server底層架構技術對比SQLServer架構
- 統一配置中心技術選型對比
- oracle同步軟體技術實現對比Oracle
- 虛擬化技術對比:Xen vs KVM
- 京東首頁前端技術剖析與對比前端
- 單點登入原理與技術實現比較
- Python2升級Python3(1):xrangePython
- (筆記) AVS 和 H.264 核心技術對比總結筆記
- ?【Alibaba中介軟體技術系列】「Nacos技術專題」配置中心載入原理和配置實時更新原理分析(中)
- Python range()Python
- Python中的arange是什麼?和range有什麼不同?Python
- Python中列表遍歷使用range和enumerate的區別Python
- PyThon range()函式中for迴圈用法Python函式
- 如何和技術人員對話
- JavaScript 中的 Range 和 Selection 物件JavaScript物件
- ORACLE同步軟體技術實現對比(轉載)Oracle
- 對話式互動技術原理及流程揭祕
- 針對新型程式注入技術Ctrl-Inject原理分析
- 大前端的技術原理和變遷史前端
- Oracle DUL的工作原理和技術實現Oracle
- C# 委託原理刨析,外加和事件對比C#事件
- Java和Python的程式設計對比JavaPython程式設計
- 對比Ruby和Python的垃圾回收(1)Python
- python-rangePython