深入理解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生成器(Generator)详解
Apr 13 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
Python简单定义与使用二叉树示例
May 11 Python
python写日志文件操作类与应用示例
Jul 01 Python
python区分不同数据类型的方法
Oct 14 Python
Python netmiko模块的使用
Feb 14 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
python中如何对多变量连续赋值
Jun 03 Python
Python实现简单的猜单词
Jun 15 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
phpmyadmin操作流程
2006/10/09 PHP
discuz7 phpMysql操作类
2009/06/21 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php中smarty区域循环的方法
2015/06/11 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
Python中的默认参数详解
2015/06/24 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
Flask-WTF表单的使用方法
2019/07/12 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Python控制台实现交互式环境执行
2020/06/09 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
初中生三年学习生活的自我评价
2013/11/03 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
周鸿祎:教你写创业计划书
2013/12/30 职场文书
大四学生思想汇报
2014/01/13 职场文书
反邪教学习心得体会
2016/01/15 职场文书
再谈python_tkinter弹出对话框创建
2022/03/20 Python
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server