第 8 章 列表和词典 列表和词典
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
现在我们已经学习了数字和字符串,本章将全面介绍 Python 的列表和字典对象类型,它们是其他对象的集合,也是几乎所有 Python 脚本的主力。正如您将看到的,这两种类型都非常灵活:它们可以就地更改,可以按需增长或收缩,可以包含或嵌套在任何其它类型的对象中。 通过利用这些类型,您可以在脚本中构建和处理任意丰富的信息结构。
列表
我们内置对象之旅的下一站是 Python列表。列表是 Python 最灵活的有序集合对象类型。与字符串不同,列表可以包含任何类型的对象:数字、字符串甚至其他列表。此外,与字符串不同,列表可以通过赋值到偏移量和片段、列表方法调用、删除语句等方式进行更改--它们是可变对象。
Python 列表完成了许多您可能需要在低级语言(如 C 语言)中手动实现的集合数据结构的工作。下面是对它们的主要属性的简要介绍。Python 列表是:
- 任意对象的有序集合
从功能角度看,列表只是收集其他对象的地方,因此可以将它们视为组。列表还在其包含的项目之间保持从左到右的位置排序(即它们是序列)。
- 通过抵消访问
就像使用字符串一样,你可以根据对象的偏移量对列表进行索引,从而从列表中获取组件对象。由于列表中的项目是按位置排序的,因此还可以执行切片和连接等任务。
- 可变长度、异构和任意嵌套
与字符串不同,列表可以就地增长和收缩(长度可以变化),而且可以包含任何类型的对象,而不仅仅是单字符串(它们是异构的)。由于列表可以包含其他复杂对象,因此还支持任意嵌套;你可以创建列表的列表,等等。
- 在 "可变序列 "类别中
就我们的类型类别限定符而言,列表是可变的(即可以就地更改),并且可以响应所有用于字符串的序列操作,如索引、切分和连接。事实上,序列操作对列表的作用与对字符串的作用相同;唯一的区别是,当序列操作(如连接和分片)应用于列表时,返回的是新的列表而不是新的字符串。不过,由于列表是可变的,因此它们还支持字符串不支持的其他操作,如删除和索引赋值操作,这些操作会改变列表的位置。
- 对象引用数组
从技术上讲,Python 列表包含对其他对象的零个或多个引用。如果您有其他语言的背景,列表可能会让您联想到指针数组(地址)。 从 Python 列表中获取一个项目的速度和索引 C 数组的速度差不多;事实上,列表在标准 Python 解释器中确实是数组,而不是链接结构。不过,正如我们在第 6 章学到的,无论何时使用引用,Python 总是遵循对象的引用,因此您的程序只与对象打交道。每当您将一个对象赋值给一个数据结构组件或变量名时,Python 总是存储对同一个对象的引用,而不是它的副本 (除非您显式地请求副本)。
作为预览和参考,表 8-1总结了常见的和有代表性的 list 对象操作。对于 Python 3.3 来说,表 8-1 已经相当完整,但要了解全部内容,请查阅 Python 标准库手册,或交互运行help(list) 或dir(list) 调用,以获得完整的 list 方法列表--您可以传入一个真实的 list,或单词list ,它是 list 数据类型的名称。 这里的方法集特别容易改变--事实上,有两个方法是 Python 3.3 新增加的。
| 运行 | 口译 |
|---|---|
| 空列表 |
| 四个项目:指数 0...3 |
| 嵌套子列表 ... |
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access