深入理解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寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
int在python中的含义以及用法
Jun 27 Python
如何在Django项目中引入静态文件
Jul 26 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
Feb 13 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
python控制台打印log输出重复的解决方法
May 14 Python
python中 Flask Web 表单的使用方法
May 20 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 array_merge下进行数组合并的代码
2008/07/22 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
PHP5.3新特性小结
2016/02/14 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Python模拟三级菜单效果
2017/09/11 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python返回数组/List长度的实例
2018/06/23 Python
python绘制多个曲线的折线图
2020/03/23 Python
python实现简易动态时钟
2018/11/19 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python 爬取小说并下载的示例
2020/12/07 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
我的祖国演讲稿
2014/05/04 职场文书
2014年节能工作总结
2014/12/18 职场文书
致接力运动员加油稿
2015/07/21 职场文书
培训心得体会怎么写
2016/01/25 职场文书