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如何通过protobuf实现rpc
Mar 06 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
Python中常见的异常总结
Feb 20 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
基于Python的一个自动录入表格的小程序
Aug 05 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 动态多文件上传
2009/01/18 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
简单介绍Python中的len()函数的使用
2015/04/07 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
python 对xml解析的示例
2021/02/27 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
《雨点》教学反思
2014/02/12 职场文书
实习生岗位职责
2014/04/12 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
一般纳税人申请报告
2015/05/18 职场文书
名人传读书笔记
2015/06/26 职场文书