深入理解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使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
python数字图像处理实现直方图与均衡化
May 04 Python
如何通过python画loss曲线的方法
Jun 26 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
PYTHON绘制雷达图代码实例
Oct 15 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
重写django的model下的objects模型管理器方式
May 15 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
如何解决.cuda()加载用时很长的问题
May 24 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 上传文件的方法(类)
2009/07/30 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
vue组件实例解析
2017/01/10 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
如何基于python实现不邻接植花
2020/05/01 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
python 深度学习中的4种激活函数
2020/09/18 Python
生产部经理岗位职责
2013/12/16 职场文书
满月酒答谢词
2014/01/14 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
班级文化建设标语
2014/06/23 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
小学生春游活动方案
2014/08/20 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
大学感恩节活动总结
2015/05/05 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
JavaScript获取URL参数的方法分享
2022/04/07 Javascript