深入理解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比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
Python中字典的基本知识初步介绍
May 21 Python
Python实现栈的方法
May 26 Python
python在控制台输出进度条的方法
Jun 20 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
如何正确理解PHP的错误信息
2006/10/09 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
用js遍历 table的脚本
2008/07/23 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
2013的个人自我评价
2013/12/26 职场文书
护校行动方案
2014/05/31 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python
Sql Server之数据类型详解
2022/02/28 SQL Server