且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《树莓派Python编程指南》——3.2 在结构体中存储值

更新时间:2022-10-04 19:34:18

本节书摘来自华章计算机《树莓派Python编程指南》一书中的第3章,第3.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 在结构体中存储值

除了简单数据类型,Python还允许我们将数据用不同方式组合起来创建结构体。最简单的结构体是sequences(线性结构)。它将信息一个接一个地存储起来。它分为有两类:lists(列表)和tuples(元组)。多数情况下,它们是相似的。
来看接下来的例子:


《树莓派Python编程指南》——3.2 在结构体中存储值

我们用方括号将数字括起来构成列表,用圆括号将数字括起来构成元组。到现在为止,它们两个工作起来都是一致的。在结构体名后面跟方括号,方括号中填下标就可以访问单个元素。注意下标从0开始,因此list_1[0]和tuple_1[0]可以访问线性结构中的第一个元素。
当你去更新元素时就会发现列表和元组间的差别:


《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/20048aa63e74a35f2274a62cd11a0975f79c7de1.png" >

可见,你可以更新列表中的单个元素,却不能更新元组中的单个元素。然而,你可以一次性覆盖元组中的所有元素。这时,可以告诉Python将变量tuple_1赋一个新值以取代旧值。


《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/8c47416e9c6bfc4fdafbf64559be6868b177adc2.png" >

上一节中我们提到的strings就是一串字符,它的操作符可以用于列表和元组。下面继续以list_1和tuple_1为例:


《树莓派Python编程指南》——3.2 在结构体中存储值

参考表3-3,复习下我们可以在这里使用的字符串操作。
列表和元组中的元素可以是任意数据类型,包括列表和元组自身。如果愿意,你可以创建列表的列表的列表的列表。当然,如果真的这样做了,你的代码将会变得异常难懂。但列表的列表,通常会比较有用。你可以把它当做一个二维表:


《树莓派Python编程指南》——3.2 在结构体中存储值

你可以通过主列表和子列表索引来获取元素:

从表


《树莓派Python编程指南》——3.2 在结构体中存储值

3-4中可以看出来为什么它可以当做二维表。
表3-4 二维列表示例

《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/cd8226a1a63eaf62e30c783f4009c27b2a47f2a6.png
" >

有许多方法可以用来操纵列表。表3-5给出了常用的方法。


《树莓派Python编程指南》——3.2 在结构体中存储值

这里的多数例子都和我们之前遇见的不一样,因为它们(除了index()和sort())改变了list_3的值而不是返回一些值。例如,在Python解释器中运行第一个例子,当然,你需要额外的一行来显示list_3的值。


《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/6cb63d138fc6f51c08720e0bf9f3d06145c5ae81.png" >

然而,index()和count()仅仅返回一个值:


《树莓派Python编程指南》——3.2 在结构体中存储值

pop(x)有点特殊,因为它一次做了两件事。首先,它返回列表中第x个位置的元素值,同时它还从列表中删除了该元素。试着运行下面的例子,感受下它是如何工作的:


《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/7142fc02e637d0569b0ab5eca9415a788d7a432f.png" >

上面说过,元组除了不能被修改,它和列表非常类似。所有用于列表操作,只要不改变元素值,都可以用于元组:


《树莓派Python编程指南》——3.2 在结构体中存储值

3.2.1 字典和集合中的非序列元素
你可以认为列表和元组是元素的集合,每个元素都对应了其中的一个下标。例如,在列表[“a”, “b”, “c”, “d”]中,a的下标是0,b的下标是1,以此类推。然而,当你想用非数字的下标时该怎么做呢?例如,你想要创建一个数据结构,把朋友的昵称和真实名字关联起来,如:


《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/33c411b6c7f863336f6a27e8d9682ab004ea94db.png" >

在Python中,可以使用通过花括号来定义的字典(dictionary)。你可以使用下列语句创建字典real_name:


《树莓派Python编程指南》——3.2 在结构体中存储值

字典中的元素称为键值对(key/value pair),其中第一部分(本例中的昵称)是键(key),第二部分(全名)是值(value)。只需要给定一个新key及其对应的值就可以在字典中新加元素:


《树莓派Python编程指南》——3.2 在结构体中存储值

你可能想知道为什么需要下标或者键。实际上,这些并不是必需的。Python中的集合(set)允许你把一堆数据放在一起而不用指定下标或序号。例如:


《树莓派Python编程指南》——3.2 在结构体中存储值

可以看出,Python使用in操作来测试给定的值是否在集合中。还有些其他操作可以用到集合中。参见表3-6。
表3-6 集合的操作(例子中使用了先前定义的集合)
操作符 含义 例子

返回两个集合共有的元素    
合并两个集合中的元素    
set_1中存在set_2中不存在的元素    
set_1或set_2中存在的元素,不包括两个集合共有的元素    


《树莓派Python编程指南》——3.2 在结构体中存储值https://yqfile.alicdn.com/74cd9f8997c3d3c79c0f3f820a3dd6e47893f65a.png
" >

3.2.2 知识测试
下面的Python语句是什么意思?试想一下,然后将它们输入Python解释器检验下自己的判断。提示:有一些语句会导致错误。


《树莓派Python编程指南》——3.2 在结构体中存储值