Difference between Range and Xrange in Python

原创 2015年11月18日 15:13:18

概述

之前在stackoverflow上看见一个答案描述Python中range与xrange的区别:
range的返回值是一个list,包含所有范围内满足条件的元素;
而Xrange的返回值是一个xrange的Object,通过协程,在每次调用时运行一次生成下一个元素的对象。
(在文档中可以找到类似的表述)

也就是说range是一次生成所有元素并返回list,而xrange是在每次调用时生成一个;换言之,xrange对内存会更加友好。


举一个栗子

在了解这个答案后我的印象中一直认为xrange貌似要比range好一点,不过一直没有一个直观的印象。
直到最近尝试做ProjectEuler的一个题:Highly divisible triangular number

无脑地直接写了一个暴力的解法:

triangular = 0
triangular_step = 0


def triangular_num():
    global triangular_step, triangular
    # make step add 1, and figure out triangular num
    triangular_step += 1
    triangular += triangular_step


def divisor_num(digit):
    num = 0
    for tmp in range(1, digit + 1):
        if digit % tmp == 0:
            num += 1
    return num


if __name__ == "__main__":
    while True:
        triangular_num()
        dn = divisor_num(triangular)
        with open('./out.txt', 'a') as f:
            f.write(str(triangular) + ' : ' + str(dn) + '\n')
        if dn > 500:
            break

运行时发现内存的使用量高达几百,并且很稳定地向上增长:
python2.7-range

之后我将range改为xrange:
python2.7-xrange
内存由此稳定在3.5M左右。


注与吐槽

说明一下,笔者使用的Python是2.7的版本,在Python3中range的功能已由xrange替换,所以你可以放心大胆地用range而不用担心内存的问题。

吐槽:
笔者也想用Python3,python3中很多特性都非常好,不过无奈更新太频繁,很多组件都不支持。
学习中的一点小体会,写出来与大家分享一下。

版权声明:本文为博主原创文章,未经博主允许不得转载。

[Python] xrange和range的使用区别

range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个列表。 eg:>>> range(10) [0, ...
  • humanking7
  • humanking7
  • 2015年05月24日 12:09
  • 11905

Python中Range和XRange的区别

Python中Range和XRange的区别(Difference between Range and XRange in Python)最近机器出了点问题,所以一直没有写新的东西出来。之前在读Pyt...
  • oatnehc
  • oatnehc
  • 2010年03月03日 16:42
  • 9372

Python range和xrange的区别和联系

Python range和xrange的区别和联系一言以蔽之 range产生的是一个列表,而xrange产生的是一个类似迭代器的。 所以对于较大的集合时候,xrange比range性能好...
  • never_cxb
  • never_cxb
  • 2015年11月21日 09:57
  • 2096

怎样去使用Python的xrange和range

在Python2.7里面,有两个非常简便的方法去构造列表,或者去用于构造整数循环,这两个函数就是xrange和range,你猜到没? 下面我们就来说说两者的不同之处。...
  • IT_DREAM_ER
  • IT_DREAM_ER
  • 2016年11月04日 20:12
  • 1375

range,xrange,arange比较

python range介绍range多用作循环,range(0,10)返回一个listpython xrange 介绍xrange也是用作循环,只是xrang(0,10)不返回list,返回xran...
  • duankaifei
  • duankaifei
  • 2015年02月17日 17:09
  • 6149

Python中 range 和xrange的详细区别

range     函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。 range示例:  >>...
  • u012192662
  • u012192662
  • 2015年04月01日 16:58
  • 3652

Python--xrange()和range()的区别不同

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 Type "copyright",...
  • xiaowanggedege
  • xiaowanggedege
  • 2013年12月06日 09:41
  • 1719

函数range()与xrange()的比较

range与xrange的比较range函数用法: range(stop) range(start,stop[,step]) 函数说明: 这是一个创建包含数列的列表的通用函数。它最常用于for...
  • jlqCloud
  • jlqCloud
  • 2015年07月29日 11:24
  • 1191

What's the difference between C++ and Python

In Principle 1. C++ is a "statically typed" language, while Python is a "dynamically typed" languag...
  • bachelorchen
  • bachelorchen
  • 2015年07月20日 11:07
  • 211

Python 学习入门(32)—— xrange/range

在Python中range和xrange是不同的,两者的区别是微妙的。为了简单起见,这里省略两个函数的可选参数start和step。range返回值和想象的一样:一个从0开始指定长度的连续整数序列。然...
  • sunboy_2050
  • sunboy_2050
  • 2013年12月21日 22:25
  • 4870
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Difference between Range and Xrange in Python
举报原因:
原因补充:

(最多只允许输入30个字)