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之Import 模块
Oct 13 Python
python生成式的send()方法(详解)
May 08 Python
Python面向对象编程基础解析(一)
Oct 26 Python
python的exec、eval使用分析
Dec 11 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
Python暴力破解Mysql数据的示例
Nov 09 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Django实现drf搜索过滤和排序过滤
Jun 21 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基于Snoopy解析网页html的方法
2015/07/09 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
js中小数转换整数的方法
2014/01/26 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python I/O与进程的详细讲解
2019/03/08 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
python的链表基础知识点
2020/09/13 Python
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
会计电算化专业毕业生推荐信
2013/12/24 职场文书
回门宴答谢词
2014/01/13 职场文书
法律进机关实施方案
2014/03/12 职场文书
2015年党性分析材料
2014/12/19 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
pandas提升计算效率的一些方法汇总
2021/05/30 Python
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
Redis数据同步之redis shake的实现方法
2022/04/21 Redis
Django中celery的使用项目实例
2022/07/07 Python