深入理解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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
python实现浪漫的烟花秀
Jan 30 Python
python 自动批量打开网页的示例
Feb 21 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
python动态视频下载器的实现方法
Sep 16 Python
pycharm 对代码做静态检查操作
Jun 09 Python
Python3 requests模块如何模仿浏览器及代理
Jun 15 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
python神经网络编程之手写数字识别
May 08 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
js实现日历与定时器
2017/02/22 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
解密Python中的描述符(descriptor)
2015/06/03 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
python pandas时序处理相关功能详解
2019/07/03 Python
上海方立数码笔试题
2013/10/18 面试题
酒店经理职责
2014/01/30 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
安全标语口号
2014/06/09 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书