将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range 将xrange改为range
Syntax range ( [start,] stop [, step] ) xrange ( [start,] stop [, step] ) Summary xrange 和 xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。 生成很大的数字序列的时候,用 xrange 会比 range 性能优很多,因为不需要一上来就开辟一块很大的内存空间。所以尽量用 xrange 。 然而感觉 python3 中的 range 设计成了 python2 中的 xrange 。 (10) >>> type(b) <type 'xrange'> >>> b xrange(10) >>> b[5] 5
range可以返回一个可以用于所有目的的普通列表对象,而xrange将返回一个特殊目的的对象,尤其适用于迭代操作,但是xrange并不返回一个迭代器,如果需要这样一个迭代器,可以调用iter(xrange >>> print range(5) [0, 1, 2, 3, 4] >>> print xrange(5) xrange(5) >>> 其中,range将返回一个普通列表,但是xrange将返回一个特殊目的对象 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] : <type 'xrange'> xrange(100) 0 1 所以xrange做循环的性能比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(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'> xrange(100) 0 1 所以xrange做循环的性能比range好,尤其是返回很大的时候。
我们从xragne的官方帮助文档可以看出: xrange和range的参数和用法是相同的。只是xrange()返回的不再是一个数列,而是一个xrange对象。 由于xrange对象是按需生成单个的元素,而不像range那样,首先创建整个list。所以,在相同的范围内,xrange占用的内存空间将更小,xrange也会更快。 2、xrange()返回的是一个xrange object,且这个对象是个iterable。 3、两者都可用于for循环。 4、xrange()占用更少的内存空间,因为循环时xrange()只生成当前的元素,不像range()一开始就成生成完整的list。 但是在Python 3里,range()这种实现被移除了;保留了xrange()的实现,且将xrange()重新命名成range()。
range示例: >>> range(5) [0, 1, 2, 3, 4] >>> range(1,5) [1, 2, 3, 4] >>> range(0,6,2) [0, 2, 4] xrange 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性能优很多,因为不需要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用: for i in : <type 'xrange'> xrange(100) 0 1 所以xrange做循环的性能比range好,尤其是返回很大的时候,尽量用xrange吧,除非你是要返回一个列表。
在 Python 3 中,没有 xrange,但 range 函数的行为类似于 Python 2 中的 xrange。 xrange() 返回 – xrange() 对象。 其基本原因是 range() 的返回类型是 list 而 xrange() 是 xrange() 对象。 另一方面,由于 xrange() 返回 xrange 对象,与 list 关联的操作不能应用于它们,因此是不利的。 此类操作不能在 xrange() 上执行。 在 python 3 中,不支持 xrange()。 在 python 2 中,xrange() 用于迭代 for 循环。
([start], stop[, step]) xrange与range类似,只是返回的是一个"xrange object"对象,而非数组list。 要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。 例如:>>> lst = xrange(1,10)>>> lstxrange(1, 10)>>> type(lst)<type 'xrange'>>>> list(lst)[1, 2, 3, 4, 5, 6, 7, 8, 9]区别如下: 1.range和xrange都是在循环中使用,输出结果一样。 2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
] >>> range(2,10) [2, 3, 4, 5, 6, 7, 8, 9] >>> range(2,10,2) [2, 4, 6, 8] >>> type(_) <type 'list'> xrange eg: >>> xrange(10) xrange(10) >>> xrange(2,10) xrange(2, 10) >>> xrange(2,10,2) xrange(2, 10, 2) >>> type(_) <type 'xrange'> >>> list(xrange(2, 10, 2)) [2, 4, 6, 8] 但是要生成很大的数字序列的时候,用xrange会比range性能优很多, (0,50) >>> xr xrange(50) >>> type(xr) <type 'xrange'> >>> print xr[0],xr[49] 0 49 >>> list(xr) == r True 再循环中尽量使用 xrange 这样性能可以得到提高,除非你要返回一个列表 >>> for i in range(0,50): print i, 0 1 2 3 4 5 6 7 8 9 10 11
for i in range(1, 5):print(i)# i 返回1,2,3,4for i in xrange(1, 5):#返回同上Python 2.x中:xrange用法与range完全相同,所不同的是 而xrange生成的是一个生成器。 要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一开始就开辟一块很大的内存空间Python 3.x中:取消了xrange, Python3中返回的是一个range对象(class
range()返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。 xrange()则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少。因而性能非常好,所以尽量用xrange吧。 在python3 中没有xrange,只有range。 () xrange与range类似,只是返回的是一个"xrange object"生成器对象,而非数组list。 xrange示例: >>> xrange(6) xrange(6) # 注意:这里输出的和range就不同喽 >>> list(xrange(6)) [0, 1, 2, 3, 4, 5] >>> xrange (1, 6) xrange(1, 6) >>> list(xrange(1, 6)) [1, 2, 3, 4, 5] >>> xrange(0,6,2) xrange(0, 6, 2) >>> list
num -= 1 >>> l = list(simple_xrange(8)) >>>print l [8, 7, 6, 5, 4, 3, 2, 1] 在上例中我们实现了一个简单的xrange, 但还是看不出这个simple_xrange是怎么执行的,现在我们来看看下面的实验: >>> it = simple_xrange (8) >>> it.next() 8 >>> it.next( 的执行过程: 1、 当执行it = simple_xrange(8)时,simple_xrange返回一个生成器,即it成为一个生成器。 把上面的1234条目跟上文python manual的说法对照一下,是相互呼应的,这样我们就理解了xrange的实现机理,从而可以利用yield语句写出自己的xrange了。 搞了这么久,实现自己的xrange有必要吗?当然是有的,xrange只是产生了一个系列,如果要对这个系列有什么扩展的话,写出来的代码就比较难看了。
a=(x for x in range(10),括号表示)和带yield的generator function 生成器不但可以用for,还可以用next range直接生成一个可迭代的list,xrange
然而,xrange返回一个"xrange 对象",该对象非常类似于迭代器。如果你曾经研究过迭代器,则两者的区别就很明显。 下面是个例子: range(1000000) xrange(1000000) range(1000000)会返回一个100万的整数元素的序列,而xrange(1000000)在本质上会返回一个迭代序列。 显然xrange支持迭代,而range不支持。这种收益是很小的,因为"当需要元素的时候,xrange仍然要创建它们"。但是无论需要的序列多大,每次遍历时xrange消耗相同量的内存。 另一个优势也是明显的:当你的代码在遍历已经产生的序列时调用break的话, xrange显然比range要好,因为xrange会消耗更少的内存。 这两个基本上都是在循环的时候用。 尽量用xrange吧,除非你是要返回一个列表。
xrange in module __builtin__: class xrange(object) | xrange(stop) -> xrange object | xrange(start, 只是xrange()返回的不再是一个数列,而是一个 xrange对象。这个对象可以按需生成参数指定范围内的数字(即元素)。 由于xrange对象是按需生成单个的 元素,而不像range那样,首先创建整个list。所以,在相同的范围内,xrange占用的内存空间将更小,xrange 也会更快。 2、xrange()返回的是一个xrange object,且这个对象是个iterable。 3、两者都用与for循环。 4、xrange()占用更少的内存空间,因为循环时xrange()只生成当前的元素,不像range()一开始就成生成完整的list。
调用时会从内存中去读取并释放 xrange输出的数值则是一个引用的对象,它不是把遍历结果输出并保存到内存,而是在需要使用该数值时才会去遍历这个范围段的数值,和range不同的是,xrange不会输出信息 xrange是一个object,只有在读取xrange的数据时才会执行它里面的值 xrange的帮助信息 In [7]: help(xrange) Help on class xrange in module __builtin__: class xrange(object) | xrange(stop) -> xrange object | xrange(start, stop[, step]) -> /usr/bin/python for f in xrange(1,10): for j in xrange(1,f+1): print "%sx%s=%s" % (j, f, /usr/bin/python import time import sys for i in xrange(10): if i == 3: continue elif
for i in xrange(m): temp0 =[] for j in xrange(featureDims): tem1 __m_hashFun_level1Subset.append(temp0) for i in xrange(self.__m_k): self. __m_M-1)) def __GetHashFun_level1(self): #生成一级哈希函数 for i in xrange(self. __m_M): for j in xrange(self.__m_k): val = random.randint(0,self. [i] for j in xrange(self.
mat(random.random((K, n))) alpha = 0.0002 beta = 0.02 maxCycles = 10000 for step in xrange (maxCycles): for i in xrange(m): for j in xrange(n): if dataMat[i #print dataMat[i,j] error = dataMat[i,j] for k in xrange q[k,j] = q[k,j] + alpha * (2 * error * p[i,k] - beta * q[k,j]) loss = 0.0 for i in xrange (m): for j in xrange(n): if dataMat[i,j] > 0: error =
+ n) class Solution2: def isMatch(self, s, p): k = 2 result = [[False for j in xrange (len(p) + 1)] for i in xrange(k)] result[0][0] = True for i in xrange(1, len(p) + 1) : if p[i-1] == '*': result[0][i] = result[0][i-1] for i in xrange ) # Space: O(m * n) class Solution3: def isMatch(self, s, p): result = [[False for j in xrange (len(p) + 1)] for i in xrange(len(s) + 1)] result[0][0] = True for i in xrange(1, len
9.1 xrange的用法: xrange(开始,结束,步长) xrange 它生成一个xrange对象。 比如: >>> a = xrange(1,10) >>> print type(a) <type 'xrange'> >>> print a[0] 1 >>> x = xrange(1,10) #返回的是一个生成器 >>> x xrange(1, 10) >>> b =range(1,10) #返回的是一个列表 >>> type(b) <type 'list'> >>> b [1, 2, 3, 4, 5, 6, xrange: 它是生成一个xrange对象. xrange的用法: 1、当我们需要操作一个非常大的数据,而且内存比较吃紧的时候,我们可以用xrange来操作省内存。 xrange的数据是取的时候才生成,而range是一次性生成好 2、xrange一般用在循环里面,比如我们只需要操作部分数据的话,而不是返回全部元素来完成操作,推荐用xrange,效率更高。