深入理解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去掉字符串中重复字符的方法
Feb 27 Python
详解Python中的__init__和__new__
Mar 12 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
Python脚本实现集群检测和管理功能
Mar 06 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
python爬虫实例详解
Jun 19 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
python学生信息管理系统实现代码
Dec 17 Python
Python headers请求头如何实现快速添加
Nov 03 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多线程异步请求的3种方法
2014/01/17 PHP
php实现的短网址算法分享
2014/06/20 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
python中xlutils库用法浅析
2020/12/29 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
办加油卡单位介绍信
2014/01/09 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
双拥工作宣传标语
2014/06/26 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
从原生JavaScript到React深入理解
2022/07/23 Javascript