Python中列表、字典、元组数据结构的简单学习笔记


Posted in Python onMarch 20, 2016

列表

列表是Python中最具灵活性的有序集合对象类型。与字符串不同的是,列表可以包含任何类型的对象:数字、字符串甚至其他列表。列表是可变对象,它支持原地修改的操作。

Python的列表是:

  • 任意对象的有序集合
  • 通过偏移读取
  • 可变长度、异构以及任意嵌套
  • 属于可变序列的分类
  • 对象引用数组(列表中的存储的是对象的引用,而不是对象的拷贝)

实际应用中的列表

>>基本列表操作
由于列表是序列,它支持很多与字符串相同的操作。列表对”+”和”*“操作的响应与字符串很相似,两个操作的意思也是合并和重复,只不过是一个新的列表,而不是一个字符串。

>>索引、分片和矩阵
对于列表而言,索引和分片操作与字符串中的操作基本相同。然而对列表进行索引的结果就是你指定的偏移处的对象(不管是什么类型),而对列表分片时往往返回一个新的列表。

matrix = [[1,2,3],[4,5,6],[7,8,9]]

上述代码定义了一个3*3的二维矩阵。

>>原处修改列表
索引与分片的赋值

当使用列表的时候,可以将它赋值给一个特定项(偏移)或整个片段(分片)来改变它的内容,索引和分片的赋值都是原地修改,它们对列表进行直接修改,而不是生成一个新的列表作为结果.Python中的索引赋值与C及大多数其他语言极为相似——Python用一个新值取代指定偏移的对象引用

列表方法的调用

最常用的列表方法是append,它能够简单地将一个单项(对象引用)加至列表末端。与合并不同的是,append允许传入单一对象而不是列表。L.append(X)与L+[X]的结果类似,不同的是,前者会原地修改L,而后者会生成新的列表。 另一个比较常用的方法就是sort,它原地对列表进行排序。sort是使用Python标准的比较检验作为默认值(在这里指字符串比较),而且以递增的顺序进行排序。另外,我们可以通过传入一个关键字参数来修改排序行为——这是指定按名称传递的函数调用中特殊的”name=value”语言。

需要注意的是:要当心append和sort是原地修改列表对象的,方法的返回结果并没有返回列表(从技术上讲,两者的返回值都是None)。如果编写类似L=L.append(X)的语句,将不会得到修改后的值(实际上,会失去整个列表的引用)。

  • reverse:原地反转列表
  • extend:在末端插入多个元素
  • pop:删除最后一个元素,同时返回被删除的值
  • remove:通过值删除某个元素
  • insert:在偏移处插入某个元素
  • index:查找某元素的偏移

字典

如果把列表看做是有序的对象集合,那么就可以把字典当成是无序的集合,它们主要的差别就在于:字典当中的元素师通过键来存取的,而不是通过偏移存取。 Python字典的主要属性如下:

  • 通过键而不是偏移来读取
  • 任意对象的无序集合
  • 可变长、异构、任意嵌套
  • 属于可变映射类型
  • 对象引用表(散列表)(字典中的存储的是对象的引用,而不是对象的拷贝)
  • 实际应用中的字典

>>原处修改字典
与列表相同,向字典中已存在的索引值赋值会改变与索引相关联的值。然而,与列表不同的是,每当对新字典键进行赋值(之前没有被赋值的键),就会在字典内生成一个新的元素。

>>其他字典的方法

  • keys:返回字典的键列表
  • values:返回字典的值列表
  • items:返回字典的(key,value)对元组
  • update:合并
  • pop:从字典中删除一个键并返回它的值

>>字典用法注意事项

  • 序列运算无效
  • 对新索引赋值会添加项
  • 键不一定总是字符串

>>创建字典的其他方法

#Method1
D = {'name':'mel','age':45}
#Method2
D = {}
D['name']='mel'
D['age']=45
#Method3
D = dict(name='mel',age=45)
#Method4
D = dict([('name','mel'),('age',45)])

以上四种形式都会建立相同的字典。

>>Python3.0中的字典变化
字典的功能在Python3.0中已经有所变化了,具体来说,Python3.0中的字典:

  • 支持一种新的字典解析表达式,这是列表和集合解析的”近亲”
  • 对于D.key,D.values和D.items方法,返回可迭代的视图,而不是列表
  • 由于前面一点,需要新的编码方式通过排序键来遍历
  • 不再直接支持相对大小比较——取而代之的是手动比较
  • 不再有D.has_key方法——相反,使用in成员关系测试

字典视图

在Python3.0中,字典的keys、values和items都返回视图对象,而在Python2.6中,它们返回实际的结果列表。Python3.0中的字典视图并非创建后不能改变,它们可以动态地反映在视图对象创建之后对字典做出点修改:

D={'a':1,'b':2,'c':3}
K = D.keys()
V = D.values()
del D['b']
list(K)

上述代码中,最后一行的结果是[‘a','c']。

keys方法所返回的对象类似于集合,并且支持交集和并集等常见的操作;values视图不是这样,因为它们不是唯一的;但items结果是的,如果(key,value)对是唯一的并且可散列的话。

元组

元组由简单的对象构成。元组与列表非常类似,只不过元组不能再原处修改(它们是不可变的),通常是写成圆括号(而不是方括号)中一系列项。它的属性有:

  • 任意对象的有序集合
  • 通过偏移存取
  • 属于不可变序列类型
  • 固定长度、异构、任意嵌套
  • 对象引用的数组

>>实际应用中的元组

元组的特殊语法:逗号和圆括号

因为圆括号也可以把表达式括起来,如果圆括号里的单一对象时元组对象而不是一个简单的表达式,需要对Python进行特别说明。如果确实想得到一个元组,只要在这一单个元素之后、关闭圆括号之前加上一个逗号就可以了。

x = (40)
y = (40,)

上述代码中,第一行的x是一个整数,第二行的y则是一个包含了一个元素40的元组。

转换、方法以及不可变性

元组的操作和字符串及列表是一致的,值得注意的区别在于”+”、”*“以及分片操作应用于元组时将返回新元组,并且元组不提供字符串、列表和字典中的方法。

>>为什么有了列表还要元组
元组的不可变性提供了某种完整性,这样你可以确保元组在程序中不会被另一个引用修改,而列表就没有这样的保证了。

Python 相关文章推荐
python实现井字棋游戏
Mar 30 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
详解Python with/as使用说明
Dec 13 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
Python改变对象的字符串显示的方法
Aug 01 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
Django如何创作一个简单的最小程序
May 12 Python
Python机器学习实战之k-近邻算法的实现
Nov 27 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 #Python
使用Python编写基于DHT协议的BT资源爬虫
Mar 19 #Python
浅析Python基础-流程控制
Mar 18 #Python
浅析Python编写函数装饰器
Mar 18 #Python
python正则表达式之作业计算器
Mar 18 #Python
基于python yield机制的异步操作同步化编程模型
Mar 18 #Python
理解Python中的With语句
Mar 18 #Python
You might like
获取远程文件大小的php函数
2010/01/11 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
理解Javascript_05_原型继承原理
2010/10/13 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python sys.path详细介绍
2013/10/17 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
Python实现的knn算法示例
2018/06/14 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
python读取图片任意范围区域
2019/01/23 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
python3实现高效的端口扫描
2019/08/31 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
python RSA加密的示例
2020/12/09 Python
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
创建文明学校实施方案
2014/03/11 职场文书
节约用水倡议书
2014/04/16 职场文书
答谢会策划方案
2014/05/12 职场文书
中央空调节能方案
2014/06/15 职场文书
国庆节标语大全
2014/10/08 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
母亲去世追悼词
2015/06/23 职场文书
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript