返回介绍

第8章 列表与字典

发布于 2024-01-29 22:24:17 字数 2005 浏览 0 评论 0 收藏 0

这一章里我们将要介绍列表和字典,这两个对象类型都是其他对象的集合。这两种类型几乎是Python所有脚本的主要工作组件。我们将看到这两种类型都相当灵活:它们都可以在原处进行修改,也可以按需求增长或缩短,而且可以包含任何种类的对象或者被嵌套。借助这些类型,可以在脚本中创建并处理任意的复杂的信息结构。

列表

我们的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文