购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 结构体

除了简单数据类型,Python还允许将数据用不同方式组合起来创建结构体。

1.列表和元组

最简单的结构体是sequences(线性结构),它将信息一个接一个地存储起来,sequences分为两类:list(列表)和tuple(元组)。

list(列表)是一种有序的集合,可以随时添加和删除其中的元素。tuple(元组)与list非常类似,但是tuple一旦初始化就不能修改。

用“[]”将数字括起来可构成列表,用“()”将数字括起来可构成元组。在结构体名后面跟“[]”,并在其中填入下标就可以访问单个元素。

注意 :下标从0开始,因此list_1[0]和tuple_1[0]可以访问线性结构中的第一个元素。

图3.10 list与tuple的相似处

大多数情况下,list和tuple是相似的,如图3.10所示。

但是,在更新元素时就会发现列表和元组之间的差别:可以更新列表中的单个元素,但不能更新元组中的单个元素,如图3.11所示。

如果想更新元组中的单个元素,可以在一次性覆盖元组中的所有元素时,告诉Python将变量tuple_1赋一个新值以取代旧值,如图3.12所示。

字符串的操作符可以用于列表和元组,具体方法参考表3.3,部分操作如图3.13所示。

图3.11 用list与tuple更新单个元素时的差别

图3.12 用tuple更新元素

图3.13 用list与tuple进行字符串操作

2.列表操作方法

列表的操作方法如表3.4所示。

表3.4 列表操作方法

注:在Python中,计数从0开始,所以对应人类语言多为 x +1。

前7个操作的结果如图3.14所示,它们中有些返回一个值,有些改变了list_1的值,有些改变了元素的顺序。

pop( x )比较特殊,首先,它返回列表中第 x +1个位置的元素值,随后从列表中删除该元素,如图3.15所示。

图3.14 列表操作结果

图3.15 pop( x )的操作结果

3.元组操作方法

元组除了不能被修改外,其他与列表非常类似。所有对列表的操作方法,只要不改变元素的值,都可以用于元组;如果改变了元素的值,则出现错误信息,如图3.16所示。

4.字典

列表和元组是元素的集合,每个元素都对应了其中的一个下标。在列表["a","b","c","d"]中,a的下标是0,b的下标是1,以此类推。

如果要创建一个数据结构,把学号与名字关联起来,就要用到字典(dictionary,简称dict)。Python内置的字典使用键-值(key-value)存储,具有极快的查找速度。

图3.16 对元组的操作

小贴士

dict的实现原理和查字典是一样的。

假设字典包含了1万个汉字,要查某个字时,一种办法是把字典从第一页往后翻,直到找到想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。dict就是用第二种实现方式。

在Python中,可以使用通过“{}”来定义的字典,如图3.17所示。

图3.17 定义字典

字典中的元素称为键值对,其中第一部分是键(key),第二部分是值(value)。只需要给定一个新键及其对应的值,就可以在字典中添加新元素,如图3.18所示。

图3.18 添加新元素

小贴士

dict的特点如下:

· 查找和插入的速度极快,不会随着key的增加而变慢。

· 需要占用大量的内存,内存浪费多。

list的特点如下:

· 查找和插入的时间随着元素的增加而增加。

· 占用空间小,浪费内存很少,所以dict是用空间来换取时间的一种方法。

5.集合

与列表和元组使用下标、字典使用键不同,Python的集合(set)允许将一堆数据放在一起而不用指定下标或序号。

集合set和字典dict的唯一区别仅在于没有存储对应的value,Python用于集合的操作方法如表3.5所示。

表3.5 集合的操作方法

对两个集合herbs和spices的上述操作结果如图3.19所示。

图3.19 集合操作结果 K1IcfKRVeHivm+JbQTQkbISnydZjkQ5HGpvzCbz8jc2OUuvxZQknkXDrkiK+fuT0

点击中间区域
呼出菜单
上一章
目录
下一章
×