Python之range和xrange的區別

range()是Python的內置函數,用於創建整數的列表,可以生成遞增或者遞減的數列。

xrange也有相同的功能, 今天來看下它們之間的不同。

range 函數說明:range([start,] stop[, step]),根據start與stop指定的範圍以及step設定的步長。

xrange 函數說明:用法與range完全相同。

range示例:

print range(6)
print type(range(6))
print range(1, 6)
print range(0, 6, 2)


#輸出結果
[0, 1, 2, 3, 4, 5]
<type 'list'>
[1, 2, 3, 4, 5]
[0, 2, 4]

xrange示例:

print xrange(6)
print type(xrange(6))
print list(xrange(6))
print xrange(1, 6)
print list(xrange(1, 6))
print list(xrange(0, 6, 2))


#輸出結果
xrange(6)
<type 'xrange'>
[0, 1, 2, 3, 4, 5]
xrange(1, 6)
[1, 2, 3, 4, 5]
[0, 2, 4]

由上面的示例可以知道:range生成的是一個列表,而xrange生成的是一個<type 'xrange'>類型,可以使用list(xrange(6))將其轉換爲列表。因此要生成很大的數字序列的時候,用xrange會比range性能優很多,因爲不需要預先開闢一塊很大的內存空間,這兩個基本上都是在循環的時候用。

對於以下同樣遍歷100次,這兩個輸出的結果雖然都是一樣的,但實際上有很多不同。

for i in range(0, 100):
    print i

for i in xrange(0, 100):
    print i

range會直接生成一個list對象:

而xrange則不會直接生成一個list,而是每次調用返回其中的一個值:

特別提醒:xrange函數在Python3中已經取消,在python3中,range()這種實現被移除了,保留了xrange()的實現,且將xrange()重新命名成range()。所以Python3不能使用xrange,只能使用range。

在python3中執行以下代碼:

a = range(6)
print(type(a))
print(list(a))


#輸出結果
<class 'range'>
[0, 1, 2, 3, 4, 5]

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章