深入理解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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
Python的动态重新封装的教程
Apr 11 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
Linux CentOS Python开发环境搭建教程
Nov 28 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
python实现超市管理系统(后台管理)
Oct 25 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
tensorflow 查看梯度方式
Feb 04 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
用python开发一款操作MySQL的小工具
May 12 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 str_pad 函数用法简介
2009/07/11 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Flask框架的学习指南之用户登录管理
2016/11/20 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
C++是不是类型安全的
2014/02/18 面试题
计算机专业毕业生自我鉴定
2014/01/16 职场文书
租房协议书怎么写
2014/04/10 职场文书
公司演讲稿开场白
2014/08/25 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
反邪教教育心得体会
2016/01/15 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android
总结python多进程multiprocessing的相关知识
2021/06/29 Python