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 30 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python实现Singleton模式的方式详解
Aug 08 Python
详解如何减少python内存的消耗
Aug 09 Python
Python列表的切片实例讲解
Aug 20 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
Mar 02 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
WINXP下apache+php4+mysql
2006/11/25 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
中止javascript执行的方法
2014/02/14 Javascript
VueJS全面解析
2016/11/10 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python获取当前时间的方法
2014/01/14 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
python实现机器学习之多元线性回归
2018/09/06 Python
python学生信息管理系统(初级版)
2018/10/17 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
python try...finally...的实现方法
2020/11/25 Python
如何用python批量调整视频声音
2020/12/22 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
葡萄牙语专业个人求职信
2013/12/10 职场文书
见习报告的格式
2014/10/31 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫