深入理解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的Django REST框架中的序列化及请求和返回
Apr 11 Python
Python中的取模运算方法
Nov 10 Python
如何用python写一个简单的词法分析器
Dec 18 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
wxPython实现带颜色的进度条
Nov 19 Python
python取均匀不重复的随机数方式
Nov 27 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python基础之高级变量类型实例详解
Jan 03 Python
python实现拼接图片
Mar 23 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
详解python中的异常捕获
Dec 15 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
PHP 基本语法格式
2009/12/15 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
JS实现浏览上传文件的代码
2017/08/23 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python Django批量导入不重复数据
2016/03/25 Python
深入解析Python中的线程同步方法
2016/06/14 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python中enumerate函数代码解析
2017/10/31 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
自主招生自荐书
2013/11/29 职场文书
留学推荐信中文范文三篇
2014/01/25 职场文书
升学宴演讲稿
2014/09/01 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
爱心募捐感谢信
2015/01/22 职场文书
污水处理保证书
2015/05/09 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python