浅谈Python中range和xrange的区别


Posted in Python onDecember 20, 2017

range()是Python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列。xrange也有相同的功能, 今天来看下它们之间的不同。

range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。

range示例:

>>> range(6)
[0, 1, 2, 3, 4, 5]
>>> range(1,6)
[1, 2, 3, 4, 5]
>>> range(0,6,2)
[0, 2, 4]

xrange 函数说明:用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器。

特别提醒: xrange函数在Python3中已经取消,在python3中,range()这种实现被移除了,保留了xrange()的实现,且将xrange()重新命名成range()。所以Python3不能使用xrange,只能使用range

xrange示例:

>>> xrange(6)
xrange(6) # 注意:这里输出的和range就不同喽
>>> list(xrange(6))
[0, 1, 2, 3, 4, 5]
>>> xrange(1, 6)
xrange(1, 6)
>>> list(xrange(1, 6))
[1, 2, 3, 4, 5]
>>> xrange(0,6,2)
xrange(0, 6, 2)
>>> list(xrange(0, 6, 2))
[0, 2, 4]

由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要预先开辟一块很大的内存空间,这两个基本上都是在循环的时候用:

for i in range(0, 100):
  print i
for i in xrange(0, 100):
  print i

这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:

a = range(0,100)
print type(a)
print a
print a[0], a[1]

输出结果:

<type 'list'>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
0 1

而xrange则不会直接生成一个list,而是每次调用返回其中的一个值:

a = xrange(0,100)
print type(a)
print a
print a[0], a[1]

结果如下: 

<type 'xrange'>
xrange(100)
0 1

最后,再说一次, Python3中已经取消了xrange方法, 直接使用range即可!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
从零学Python之引用和类属性的初步理解
May 15 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
python对象及面向对象技术详解
Jul 19 Python
通过Python实现自动填写调查问卷
Sep 06 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
详解Python绘图Turtle库
Oct 12 Python
Python二元算术运算常用方法解析
Sep 15 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
python机器学习实战之树回归详解
Dec 20 #Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 #Python
python机器学习实战之K均值聚类
Dec 20 #Python
Python绘制3d螺旋曲线图实例代码
Dec 20 #Python
python机器学习实战之最近邻kNN分类器
Dec 20 #Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 #Python
浅谈Python实现Apriori算法介绍
Dec 20 #Python
You might like
定义php常量的详解
2013/06/09 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
node.js中watch机制详解
2014/11/17 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
node.js实现端口转发
2016/04/14 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
微信小程序实现图片压缩功能
2018/01/26 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
python网页请求urllib2模块简单封装代码
2014/02/07 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
pygame实现弹球游戏
2020/04/14 Python
python缩进长度是否统一
2020/08/02 Python
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
校园十佳歌手策划书
2014/01/22 职场文书
初一学生期末评语
2014/04/24 职场文书
会计求职自荐信
2014/06/20 职场文书
给老婆道歉的话
2015/01/20 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
python中 Flask Web 表单的使用方法
2022/05/20 Python
git stash(储藏)的用法总结
2022/06/25 Servers