python中列表和元组的区别


Posted in Python onDecember 18, 2017

如果有了解过python中的列表和元组,你可能会知道相对于列表,元组是不可变的,也就是说元组中的数据不能随意更改。除了列表是用中括号表示而元组是用小括号表示之外,这两种数据类型好像并没有什么不同,都是用来存放一系列的数据,事实真是如此吗?

a = [1, 3, 5, 7, 'a']
b = (1, 3, 5, 7, 'b')
# 现在改变b中的值
b[2] = 4
TypeError                 Traceback (most recent call last)
<ipython-input-2-96f3d2fefb53> in <module>()
   4 
   5 # 现在改变b中数据的值
----> 6 b[2] = 4
TypeError: 'tuple' object does not support item assignment

看起来除了元组不可变之外,列表完全可以取代元组,为什么要多此一举创造出元组这种类型?其实这背后有更深层的含义,列表是用来表示一组相同类型(相同价值)的数据,而元组用来存放不同类型(不同价值)的数据,简单来说,列表是同质的,而元组是异构的。

比如说,现在有一本书,书里面有一些批注。我们用元组来表示书中第几页第几行的内容,像这样:position = (page, line),然后把它放到字典里作为批注的键,表示第几页第几行有批注。同时,我们用列表来表示这些位置,如果有新的位置,可以加入列表。这符合列表可以更改数据的特点。但是如果更改元组里面的数据就没有意义了,因为这些坐标本来就是存在的。

在python的模块中,我们可以找到很多例子:

range(10)
range(0, 10)

比如range方法用来生成一列有序地数据,这些数据是等价的,并没有不同的功能,所以用列表来表示最合适。而像下面的例子:

from datetime import datetime
datetime.now()
datetime.datetime(2017, 12, 17, 20, 23, 13, 578752)

当前时间适合用元组来表式,因为元组中每个数据有不同的功能,或者说有不同的价值,像第一个数据表示年份。

说到这,想起了我们之前说过的具名元组nametuple,它用来快速的生成一个类,可以看成是类的轻量级替代方法,也很符合我们上面说的元组的功能。

Python 相关文章推荐
python下函数参数的传递(参数带星号的说明)
Sep 19 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
详解Python中for循环的使用
Apr 14 Python
python 写入csv乱码问题解决方法
Oct 23 Python
django 修改server端口号的方法
May 14 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python tkinter三种布局实例详解
Jan 06 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
python Pexpect模块的使用
Dec 25 Python
Django REST为文件属性输出完整URL的方法
Dec 18 #Python
Python3计算三角形的面积代码
Dec 18 #Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 #Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 #Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 #Python
django模板语法学习之include示例详解
Dec 17 #Python
详解python string类型 bytes类型 bytearray类型
Dec 16 #Python
You might like
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
浅谈php自定义错误日志
2015/02/13 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
Bootstrap基础学习
2015/06/16 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
Python类属性的延迟计算
2016/10/22 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
django_orm查询性能优化方法
2018/08/20 Python
使用TensorFlow实现SVM
2018/09/06 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
如何在pycharm中安装第三方包
2020/10/27 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
采购主管的岗位职责
2013/12/17 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
二人合伙经营协议书
2014/09/13 职场文书
2014年导购员工作总结
2014/11/18 职场文书
办公室文员岗位职责
2015/02/04 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js