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中的文本处理
Apr 11 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
Django上线部署之IIS的配置方法
Aug 22 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 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
德劲1103二次变频版的打磨
2021/03/02 无线电
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
js中的闭包学习心得
2018/02/06 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
js实现简易ATM功能
2020/10/27 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
python根据日期返回星期几的方法
2015/07/06 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
transform python环境快速配置方法
2018/09/27 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
详解python变量与数据类型
2020/08/25 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
土木工程个人自荐信范文
2013/11/30 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
学校捐款活动总结
2015/05/09 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL