深入理解Python中range和xrange的区别


Posted in Python onNovember 26, 2017

三水点靠木已经给大家介绍过range和xrange的区别的基础知识,有兴趣的朋友可以参阅:

本次小编给大家带来的是深入理解range和xrange之间的区别。

两种用法介绍如下:

1.range([start], stop[, step])

返回等差数列。构建等差数列,起点是start,终点是stop,但不包含stop,公差是step。

start和step是可选项,没给出start时,从0开始;没给出step时,默认公差为1。

例如:

>>> range(10)               #起点是0,终点是10,但是不包括10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10)              #起点是1,终点是10,但是不包括10
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10,2)             #起点是1,终点是10,步长为2
[1, 3, 5, 7, 9]
>>> range(0,-10,-1)            #起点是1,终点是10,步长为-1 
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0,-10,1)            #起点是0,终点是-10,终点为负数时,步长只能为负数,否则返回空
[]
>>> range(0)               #起点是0,返回空列表
[]
>>> range(1,0)              #起点大于终点,返回空列表
[]

2.xrange([start], stop[, step])
xrange与range类似,只是返回的是一个"xrange object"对象,而非数组list。
要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
例如:

>>> lst = xrange(1,10)
>>> lst
xrange(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)。

3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。

补充点:

#以下三种形式的range,输出结果相同。
>>> lst = range(10)
>>> lst2 = list(range(10))
>>> lst3 = [x for x in range(10)]
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst == lst2 and lst2 == lst3
True

注意:Python 3.x已经去掉xrange,全部用range代替。

Python 相关文章推荐
python计算auc指标实例
Jul 13 Python
Python中交换两个元素的实现方法
Jun 29 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
pip指定python位置安装软件包的方法
Jul 12 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
python实现将字符串中的数字提取出来然后求和
Apr 02 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
基于python实现复制文件并重命名
Sep 16 Python
PyCharm在win10的64位系统安装实例
Nov 26 #Python
python shell根据ip获取主机名代码示例
Nov 25 #Python
python自动裁剪图像代码分享
Nov 25 #Python
分享一个简单的python读写文件脚本
Nov 25 #Python
python之virtualenv的简单使用方法(必看篇)
Nov 25 #Python
python多进程实现进程间通信实例
Nov 24 #Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 #Python
You might like
PHP采集腾讯微博的实现代码
2012/01/19 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
js调用flash的效果代码
2008/04/26 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
在Python中使用元类的教程
2015/04/28 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python爬取招聘要求等信息实例
2020/11/20 Python
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
学校标语口号大全
2015/12/26 职场文书
初中政治教师教学反思
2016/02/23 职场文书
详解python字符串驻留技术
2021/05/21 Python
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python