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