Python列表与元组的异同详解


Posted in Python onJuly 02, 2019

前言

“列表(list)与元组(tuple)两种数据类型有哪些区别”这个问题在初级程序员面试中经常碰到,超出面试官预期的答案往往能加不少印象分,也会给后续面试顺利进行提供一定帮助,这道题主要考察候选人对Python基本数据结构的掌握程度,属于简单类型的送分题,那么该如何来回答才不至于丢分?

相同点:都是序列类型

回答它们的区别之前,先来说说两者有什么相同之处。list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作

>>> foos = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> foos[0:10:2]
[0, 2, 4, 6, 8]
>>> bars = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> bars[1:10:2]
(1, 3, 5, 7, 9)

两者的操作如此相似,Python 为什么还要设计出 tuple 这种类型出来呢?这就要从它们的不同之处来寻找答案。

不同点一:不可变 VS 可变

两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是tuple是不可变类型,大小固定,而 list 是可变类型、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别。

列表特有方法:

>>> foo = [2,3,1,9,4]
>>> foo.sort() # 排序
>>> foo.insert(5,10) # 插入
>>> foo.reverse() # 反转
>>> foo.extend([-1, -2]) # 扩展
>>> foo.remove(10) # 移除
>>> foo.pop() # 弹出最后一个元素
>>> foo.append(5) # 追加

所有的操作都基于原来列表进行更新,而 tuple 作为一种不可变的数据类型,同样大小的数据,初始化和迭代 tuple 都要快于 list

>python -m timeit "[1,2,3,4,5]"
10000000 loops, best of 3: 0.123 usec per loop
>python -m timeit "(1,2,3,4,5)"
100000000 loops, best of 3: 0.0166 usec per loop

同样大小的数据,tuple 占用的内存空间更少

>>> foo = tuple(range(1000))
>>> bar = list(range(1000))
>>> foo.__sizeof__()
8024
>>> bar.__sizeof__()
9088

原子性的 tuple 对象还可作为字典的键

>>> foo = (1,(2,3))
>>> d = {foo: 1}
>>> bar = (1, [2,3]) # 非原子性tuple,因为元组中包含有不可哈希的list
>>> d = {bar: 1}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

不同点二:同构 VS 异构

tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄。

person = ("zhangsan", 20, 180, 80)

比如记录坐标上的某个点

point = (x, y)

而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,比如下面的都是字符串类型

["zhangsan", "Lisi", "wangwu"]

再比如 list 存放的多条用户记录

[("zhangsan", 20, 180, 80), ("wangwu", 20, 180, 80)]

因为 tuple 作为没有名字的记录来使用在某些场景有一定的局限性,所以又有了一个 namedtuple 类型的存在,namedtuple 可以指定字段名,用来当做一种轻量级的类来使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3 模拟登录v2ex实例讲解
Jul 13 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
Python中格式化字符串的四种实现
May 26 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
pandas中pd.groupby()的用法详解
Jun 16 Python
Pandas中resample方法详解
Jul 02 #Python
Python何时应该使用Lambda函数
Jul 02 #Python
Python Pandas分组聚合的实现方法
Jul 02 #Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 #Python
python flask框架实现重定向功能示例
Jul 02 #Python
python实现串口自动触发工作的示例
Jul 02 #Python
python常用函数与用法示例
Jul 02 #Python
You might like
PHP变量内存分配问题记录整理
2013/11/27 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
.net工程师笔试题
2012/06/09 面试题
表彰大会主持词
2014/03/26 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
比赛主持人开场白
2015/05/29 职场文书
历史博物馆观后感
2015/06/05 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python