- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
第8章 列表与字典
列表
我们的python内置对象之旅的下一站是列表(list),列表是Python中最具灵活性的有序集合对象类型。与字符串不同的是,列表可以包含任何种类的对象:数字、字符串甚至其他列表。同样,与字符串不同,列表都是可变对象,它们都支持在原处修改的操作,可以通过指定的偏移值和分片、列表方法调用、删除语句等方法来实现。
Python中的列表可以完成大多数集合体数据结构的工作,而这些在稍底层一些的语言中(例如,C语言)你不得不手工去实现。让我们快速地看一下它们的主要属性,Python列表是:
任意对象的有序集合
从功能上看,列表就是收集其他对象的地方,你可以把它们看做组。同时列表所包含的每一项都保持了从左到右的位置顺序(也就是说,它们是序列)。
通过偏移读取
就像字符串一样,你可以通过列表对象的偏移对其进行索引,从而读取对象的某一部分内容。由于列表的每一项都是有序的,那么你也可以执行诸如分片和合并之类的任务。
可变长度、异构以及任意嵌套
与字符串不同的是,列表可以实地的增长或者缩短(长度可变),并且可以包含任何类型的对象而不仅仅是包含有单个字符的字符串(异构)。因为列表能够包含其他复杂的对象,又能够支持任意的嵌套,所以可以创建列表的子列表的子列表等。
属于可变序列的分类
就类型分类而言,列表支持在原处的修改(它们是可变的),也可以响应所有针对字符串序列的操作,例如,索引、分片以及合并。实际上,序列操作在列表与字符串中的工作方式相同。唯一的区别是:当应用于字符串上的合并和分片这样的操作应用于列表时,返回新的列表。然而列表是可变的,因此它们也支持字符串不支持的其他操作(例如,删除和索引赋值操作,它们都是在原处修改列表)。
对象引用数组
从技术上来讲,Python列表包含了零个或多个其他对象的引用。列表也许会让你想起指针(地址)数组,从Python的列表中读取一个项的速度与索引一个C语言数组差不多。实际上,在标准Python解释器内部,列表就是C数组而不是链接结构。我们曾在第6章学过,每当用到引用时,Python总是会将这个引用指向一个对象,所以程序只需处理对象的操作。当把一个对象赋给一个数据结构元素或变量名时,Python总是会存储对象的引用,而不是对象的一个拷贝(除非明确要求保存拷贝)。
表8-1总结了常见的和具有代表性的列表对象操作。和往常一样,为了得到更全面的信息,可以查阅Python的标准库手册,或者运行help(list)或dir(list)查看list方法的完整列表清单,你可以传入一个真正的列表,或者列表数据类型的名称——list这个单词。
当作为常量表达式编写时,列表会被写成系列对象(实际上是返回对象的表达式),这些对象括在方括号中并用逗号隔开。例如,表8-1的第2行将变量L2赋给一个四项的列表。嵌套的列表写成一串嵌套的方括号(第3行)。空列表就是一对内部为空的方括号(第1行)[1]。
表8-1中的大多数操作看上去应该很熟悉,因为它们都与我们先前在字符串上使用的序列操作相同,例如,索引、合并和迭代等。列表除了支持在原处的修改操作(删除项、赋值给索引和分片等)之外,还可以进行特定的列表方法调用(它们可完成排序、反转操作以及在结尾添加元素等任务),列表可以使用这些工具来进行修改操作是因为列表是可变的对象类型。
[1]在列表处理程序中,不会看到有很多列表写成这样。比较常见的代码是处理动态建立的列表(运行时)。实际上,虽然精通常量语法也很重要,但Python中多数数据结构的建立都是在运行时执行程序代码的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论