深入理解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操作json数据的一个简单例子
Apr 17 Python
python 第三方库的安装及pip的使用详解
May 11 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
利用Django提供的ModelForm增删改数据的方法
Jan 06 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
python调用自定义函数的实例操作
Jun 26 Python
如何通过Python实现标签云算法
Jul 02 Python
python框架django项目部署相关知识详解
Nov 04 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php学习之function的用法
2012/07/14 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
一个JS翻页效果
2007/07/23 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
Python Web框架Tornado运行和部署
2020/10/19 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
python程序封装为win32服务的方法
2021/03/07 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
海量信息软件测试笔试题
2015/08/08 面试题
品恩科技软件测试面试题
2014/10/26 面试题
抗洪救灾标语
2014/10/08 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书