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连接mssql数据库编码问题解决方法
Jan 01 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
Python做文本按行去重的实现方法
Oct 19 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
Python3爬虫全国地址信息
Jan 05 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
python k-近邻算法实例分享
2014/06/11 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
解决python线程卡死的问题
2019/02/18 Python
python中while和for的区别总结
2019/06/28 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
优秀大学生的自我评价
2014/01/16 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
计划生育证明格式范本
2014/09/12 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书