深入理解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从入门到精通(DAY 1)
Dec 20 Python
python多线程方式执行多个bat代码
Jun 07 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
Python_LDA实现方法详解
Oct 25 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
浅析matlab中imadjust函数
Feb 27 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
python 绘制正态曲线的示例
Sep 24 Python
详解pandas映射与数据转换
Jan 22 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数据库存储session的代码
2010/03/05 PHP
PHP操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
自写的一个jQuery圆角插件
2010/10/26 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
python中xrange和range的区别
2014/05/13 Python
pycharm 使用心得(五)断点调试
2014/06/06 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
学生信息管理系统python版
2018/10/17 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python导入pandas具体步骤方法
2019/06/23 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
质检部职责
2013/12/28 职场文书
校运动会广播稿300字
2014/10/07 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
工作失职检讨书
2015/01/26 职场文书
php修改word的实例方法
2021/11/17 PHP
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技