python的range和xrange
1. python中xrange和range的異同 CiNiao's blog
Python2 中range()生成的是一個list而xrange()則生成一個generator,兩者區別比較大,比如說
foriinrange():
printi
內存就直接爆掉,而使用xrange則不會出問題,因為xrange是每次循環,i通過表達式推出,並不會把整張列表直接生成
Python3中去掉xrange()功能由range()代替
2. python中xrange和range的區別
range()直接初始化一個list,就是將List中的所有元素放在內存中,使用時直接取;
xrange()是一個生成器,使用一個再生成一個;
在循環次數比較小時,體現不出差別,但是循環次數大的時候,xrange()性能會好些。
3. Python中Range和XRange的區別
兩基本都循環候用 [python] view plain In [1]: for i in range(0,10): ...: print i ...: 0 1 2 3 4 5 6 7 8 9 In [2]: for i in xrange(0,10): print i ...: 0 1 2 3 4 5 6 7 8 9 兩輸結都實際同range直接list象: xrange則直接list每調用返其值【xrange返器】 [python] view plain In [3]: a=range(0,100) In [4]: type(a) Out[4]: list In [5]: a=xrange(0,100) In [6]: type(a) Out[6]: xrange In [7]: print a[0],a[1] 0 1 所xrange做循環性能比range尤其返候 盡量用xrange吧除非要返列
4. python中xrange和range的異同 CiNiao's blog
只有Python2.x中才有xrange,在Python3.x中range實現了xrange的功能。
在Python2.x中:
range()返回一個列表,函數一次性產生所有的列表元素;
xrange()返回一個迭代器,函數會根據需要依次計算出各個元素;
當range()返回的列表長度很大時,會佔用很大的內存空間,這時就有必要使用xrange()。
5. Python中range和xrange的區別
首先要說明一下,只有在Python2中才有Xrange和range;Python3中沒有xrange,並且Python3中的range和Python2中的range有本質的區別,所以說這里的區別,主要針對Python2來說一下。
不同點:
在py2中,range得到的是一個列表,即
X=range(0,5)
Print(type(X))#列印X的類型,結果是list
Print(X)#結果是[0,1,2,3,4]
Xrange得到的是一個生成器對象,即
X=xrange(0,5)
Print(type(X))#輸出類型,結果為一個生成對象
Print(X)#輸出X,結果為xrange(0,5)
共同點:
它們的使用都是一樣的,比如都可以用for循環遍歷所有的值
Python3中為什麼只有range呢?這個range其實就是py2中的xrange,而不是range,因為使用生成器可以節約內存。
比如:代碼是for i in
range(0,1000),如果使用py2中的range,得到的結果是0到999的列表,會佔用很大空間;但是如果使用生成器的話,就會節省很大的資源。
6. python中xrange和range的異同 CiNiao's blog
range返回的是一個包含所有元素的列表,xrange返回的是一個生成器,生成器是一個可迭代對象,在對生成器進行迭代時,元素是逐個被創建的。一般來看,在對大序列進行迭代的時候,因為xrange的特性,所以它會比較節約內存。
我們來仔細看看這兩者的不同:
>>> Range = range(10)
>>> xRange = xrange(10)
>>> type(Range)
>>> type(xRange)
這里就是很明顯的類型上的不同了,range直接生成一個列表,xrange生成的是一個xrange對象
另外一個很明顯的區別在與xrange不支持列表切片
>>> xRange[:1]
Traceback (most recent call last):
File "", line 1, in
xRange[:1]
TypeError: sequence index must be integer, not 'slice'
在其它場合,我覺得xrange完全可以取代range,這樣你可以無需擔心列表長度的問題。
另外,xange也和普通的生成器略有不同,對於同一個xrange對象,對它進行多次迭代,每次都會從頭開始,這里我自己也試了一下
首先寫個常規生成器
>>> def test(x):
for y in x:
yield y
>>> t = test(range(10))
>>> t.next()
0
>>> t.next()
1
>>> t.next()
2
>>>list(t)
[3, 4, 5, 6, 7, 8, 9]
可以看到元素被生成出來之後就從生成器中剔除了,但是xrange有所不同
>>> xRange = xrange(10)
>>> for x in xRange:
print x
break
0
>>> for x in xRange:
print x
break
0
迭代兩次,每次都是從第一個元素開始....
7. Python中Range和XRange的區別
在大多數情況下,xrange和range在功能方面完全相同。它們都提供了一種生成整數列表的方法,唯一的區別是range返回一個Python列表對象,x range返回一個xrange對象。這就表示xrange實際上在運行時並不是生成靜態列表。它使用稱為yielding的特殊技術根據需要創建值。該技術與一種稱為生成器的對象一起使用。因此如果你有一個非常巨大的列表,那麼就要考慮xrange。
8. python中,randrange,range,xrange以及choice的區別
1.randrange()
返回一個數,必須導入random模塊
2.range
返回的是一個列表
3.xrange()
返回一個生成器,必須藉助list函數,才能看到結果
xrange與range的主要區別:
當生成很大的數字序列的時候,用xrange會比range性能優很多,因為不需要一上來就開辟一塊很大的內存空間。
4.choice'
choice() 方法返回一個列表,元組或 字元串的隨機項 。
9. Python中range和xrange的區別
range 前面小節已經說明了,range([start,] stop[, step]),根據start與stop指定的范圍以及step設定的步長,生成一個序列。
比如:
1 >>> range(5)
2 [0, 1, 2, 3, 4]
3 >>> range(1,5)
4 [1, 2, 3, 4]
5 >>> range(0,6,2)
6 [0, 2, 4]
xrange 用法與 range 完全相同,所不同的是生成的不是一個list對象,而是一個生成器。
01 >>> xrange(5)
02 xrange(5)
03 >>> list(xrange(5))
04 [0, 1, 2, 3, 4]
05 >>> xrange(1,5)
06 xrange(1, 5)
07 >>> list(xrange(1,5))
08 [1, 2, 3, 4]
09 >>> xrange(0,6,2)
10 xrange(0, 6, 2)
11 >>> list(xrange(0,6,2))
12 [0, 2, 4]
由上面的示例可以知道:要生成很大的數字序列的時候,用xrange會比range性能優很多,因為不需要一上來就開辟一塊很大的內存空間。
xrange 和 range 這兩個基本上都是在循環的時候用。
1 for i in range(0, 100):
2 print i
3
4 for i in xrange(0, 100):
5 print i
這兩個輸出的結果都是一樣的,實際上有很多不同,range會直接生成一個list對象:
1 a = range(0,100)
2 print type(a)
3 print a
4 print a[0], a[1]
輸出結果:
1 <type 'list'>
2 [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]
3 0 1
而xrange則不會直接生成一個list,而是每次調用返回其中的一個值:
1 a = 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