内容提要
概述
序列
元组
列表
字典
集合
在循环中应用序列
一、概述
Python秉承方便程序员的理念,提供了几个功能强大而高效的数据结构:元组、列表、字典和集合。程序员可以根据需要组合使用它们,以创建更复杂的数据结构。
在Python中,两个主力数据结构是列表和字典。列表按顺序存储数据,而字典就像小型数据库,使用键高效地存储和检索数据。
二、序列
在Python中,序列是一组按顺序排列的值。
Python有3种内置序列类型:字符串、元组和列表。字符串和列表是最常见的序列,元组较少使用。
序列的优点之一是像之前介绍的字符串一样支持索引和分片。
所有序列的特征:
第一个正索引为零,指向左端;
第一个负索引为-1,指向右端;
可使用分片表示法来复制子序列;
可使用+和*进行拼接(即合并)。进行拼接的序列类型必须相同;
可使用函数len计算其长度;
表达式x in s检查序列s是否包含元素x,如果x位于s中,则返回True,否则返回False。
三、元组
元组是一种不可变序列,即创建之后不能再做任何修改。
元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元组。
元组通常代表一行数据,而元组中的元素代表不同的数据项。
1、元组的创建
格式:
tuple=(元素1,元素2,…元素n) #定义n个元素组成的元组
tuple=() #定义空元组
tuple=(元素1,) #定义单元素元组
例7-1:创建元组
2、元组的访问
元组中元素的值通过索引访问,索引是一对方括号中的数字,索引也称为“下标”。
格式:
tuple[n] #访问第n个元素
tuple[m:n] #访问第1个索引到第2个索引之间的索引元素,但不包括第2个索引指向的元素
其中,n、m可以为0、正、负整数。
例7-2:访问元组的元素
执行结果:
例7-3:操作元组
3、常用元组函数
例7-4:元组函数应用
执行结果:
四、列表
列表是Python中非常重要的数据类型,通常作为函数的返回类型。
列表和元组相似,也是由一组元素组成。列表可包含任何类型的值:数字、字符串甚至序列。
列表与元组的重要差别是列表是可变的,即可以在不复制的情况下添加、删除或修改列表元素。
1、列表的创建
格式:
list=[元素1,元素2,…元素n] #定义n个元素组成的列表
list=[] #定义空列表
list=[x] #定义只包含一个元素的列表,与元组不同,最后的逗号不是必须的
说明:列表用方括号括起,其中元素用逗号分隔。
例7-5:创建列表
2、列表的使用
列表的使用与元组十分相似,同样支持负数索引、分片以及多元列表等特性,但列表的元素可修改。
与字符串和元组一样,可使用len获取列表长度,还可使用+和*拼接列表。
例7-6:列表的使用
3、常用列表函数
例7-7:在列表末尾添加元素或列表
例7-8:列表的查找、排序和反转
例7-9:给包含元组的列表排序
例7-10:用列表实现堆栈(“后进先出”的线性表)
例7-11:用列表实现队列
4、列表解析
列表的用途如此之多,以至于Python提供了一种用于创建列表的特殊方法—列表解析。
以下通过示例了解如何实现列表解析。
例7-12:用普通方法和列表解析方法分别创建一个由1~10的平方组成的列表
例7-13:将列表中的每个数字翻倍并加上7
例7-14:在列表解析中使用字符串
例7-15:利用列表解析修改现有列表
例7-16:返回列表中的正数(利用列表解析进行筛选)
例7-17:利用列表解析删除字符串中的所有元音
5、函数作为列表的元素
用函数作为参数与列表一起使用非常有用,也称为高阶编程。
例7-18:假定L是一个列表,f是一个函数,用函数替换每个元素改变列表,即用f(e)改变L中的元素e。
五、字典
字典是Python重要的数据类型,字典是由“键—值”对组成的集合,字典中的“值”通过“键”来引用。
字典也称为关联数组、映射或散列表。
Python字典利用了“散列”方法,使用专门的散列函数完成,即字典中的每个键都被转换为一个数字—散列值。
字典中值存储在一个底层列表中,并用散列值作为索引。访问值时,将提供的键转为散列值,再跳到列表的相应位置。
使用“键”来访问字典值效率极高。另外与列表一样,字典也是可以改变的:可以添加、删除或修改“键—值”对。
1、创建字典
格式:
dictionary={key1:value1, key2:value2, …, keyn:valuen)}#创建n个“键—值”对组成的字典
dictionar={} #创建空字典
注意,对于字典的键有两个限制: 字典中的键必须独一无二,即在同一个字典中,任何两个键—值对都不能相同; 键必须是不可变的。
因此,字典键不能是列表、字典 对值没有这两个限制。
2、字典的访问
字典的访问与元组、列表有所不同,元组和列表是通过数字索引获取对应的值,而字典是通过key值获取相应的value值。
格式:
value=dict[key]
说明: 字典的添加、删除和修改只需执行一条赋值语句即可,
例如:dict[’x’]=’value’ 字典没有remove操作。删除字典元素可调用内置函数del()完成。
例7-19:字典的创建、添加、删除和修改
3、字典函数
说明:
popitem()返回并删除字典的某个键—值对,具体是哪个预先并不知道,因此仅当不在乎字典元素的顺序是,此函数才适用。
item()、keys()和values()都返回一个特殊对象—视图。视图被链接到原始字典,因此若字典发生变化,视图也将相应地变化。
例7-20:字典函数应用一
执行结果:
例7-21:字典函数应用二
4、字典的排序和复制
关于复制:
复制分为深拷贝和浅拷贝,不只限于字典,适用于Python的任何对象。可使用copy模块来实现对象的深拷贝和浅拷贝,deepcopy()用于深拷贝,copy()用于浅拷贝。
深拷贝能够拷贝对象内部所有数据和引用,引用相当于C语言中指针的概念,Python并不存在指针,但是变量的内存结构中通过引用来维护变量。
浅拷贝只是复制数据,并没有复制数据的引用,新的数据和旧的数据使用同一块内存空间。
例如:字典B浅拷贝字典A的数据,如果字典B的数据发生添加、删除或修改操作,字典A的数据也将发生变化;相反,如果字典B深拷贝字典A的数据,字典B的数据即使发生变化,也不会影响的字典A。
例7-23:字典的拷贝
六、集合
在Python中,集合是一系列不重复的元素。集合类似于字典,但只包含键,而没有相关联的值。
在Python中,集合是相对较新的功能,在其还不支持集合时,一般使用字典模拟集合。 集合分两类:可变集合(set)和不可变集合(frozenset)。
对于可变集合,可添加和删除元素,而不可变集合一旦创建就不能更改。 与字典一样,集合的元素排列顺序也是不确定的。
集合没有列表和字典用得多,本章简要介绍,详细内容可参阅:https://docs.python.org/3/library/stdtypes.html#set
集合基本功能:
包括关系测试和消除重复元素。
集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集,即异或)等数学运算。 大括号或 set()函数可以用来创建集合。
注意:想要创建空集合,必须使用 set() 而不是{}。
例7-24:创建集合
例7-25:集合操作
七、在循环中应用序列
在循环中引用相关函数,可以高效地得出相应结果。
例如: enumerate()函数 zip()函数 reversed()函数 sorted()函数 items()方法(序列的)
函数具体格式及功能见帮助信息(如:help(enumerate)。
例7-26:同时获取序列索引及值
例7-27:同时循环两个或多个序列
例7-28:逆向循环序列
例7-29:按排序后的顺序循环序列
例7-30:同时获取键和对应值