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获取远程图片大小和尺寸的方法
Mar 26 Python
Python中下划线的使用方法
Mar 27 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
python3.4爬虫demo
Jan 22 Python
PyQt5实现简单数据标注工具
Mar 18 Python
详解Python 解压缩文件
Apr 09 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
在keras下实现多个模型的融合方式
May 23 Python
python 模拟登陆github的示例
Dec 04 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 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
域名和cookie问题(域名后缀)
2012/10/10 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
Smarty变量用法详解
2016/05/11 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
YII框架常用技巧总结
2019/04/27 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
Python中list初始化方法示例
2016/09/18 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
保护野生动物倡议书
2014/05/16 职场文书
生物工程专业求职信
2014/09/03 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
python执行js代码的方法
2021/05/13 Python
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫