
1.4 Python序列
在数学中,序列也称为数列,就是按照一定顺序排列的数,在计算机中,序列是指数据的存储方式。序列是Python中最基本的数据结构,表示一块连续的内存空间,Python提供了5个常用的序列结构,分别是字符串、列表、元组、字典和集合。序列都可以进行索引、切片、加、乘和检查成员操作。Python已经内置了确定序列的长度以及确定最大和最小的元素的方法。
1.4.1 列表
列表的所有元素放在一对方括号“[]”中,相邻的元素使用逗号“,”分割,列表中的元素可以是整数、实数、字符串、列表、元组等任何类型,同一列表的元素类型可以是相同的,也可以不相同,因此,Python的列表是非常灵活的,这是与其他语言的不同之处。序列中的每个元素的位置都分配一个数字,叫索引,第一个位置是0,第二个位置是1,依此类推。
1.创建一个列表
使用赋值运算符(=)将一个列表赋值给变量,语法格式如下。

其中list1为列表变量名,element-为列表中的元素,元素的数量没有限制,元素的类型是Python支持的类型,可以是相同类型,也可以是不同类型,例如:

2.访问列表
使用下标索引可访问列表中的值,也可以使用方括号的形式截取字符,例如:

可以使用for循环遍历列表,格式如下。

可以使用for循环和enumerate(List)同时输出索引值和元素值,格式如下。

列表的内置函数如图1-29所示,这些函数用于实现列表的常用操作。

图1-29 列表的内置函数
列表的内置函数说明如下。
(1)append(obj):在列表末尾添加新的元素。
(2)clear():清除列表的元素。
(3)copy():返回列表的一个浅元素。
(4)count(element):返回元素在列表中的数量。
(5)extend(l1):在列表末尾一次性追加另一个序列(用新列表扩展原来的列表)。
(6)index(element,start,end):返回元素的位置。
(7)insert(index, obj):将对象插入列表。
(8)pop():移除列表中一个元素(默认为最后一个元素),并且返回该元素的值。
(9)remove(element):移除列表中第一个匹配元素项。
(10)reverse():反向列表中元素。
(11)sort():对列表进行排序,前提是元素为同类型。
Python中包含的对列表的操作内置函数如下。
(1)cmp(l1, l2):比较两个列表的元素。
(2)len(l1):返回列表元素个数。
(3)max(l1):返回列表元素最大值。
(4)min(l1):返回列表元素最小值。
(5)list(seq):将元组转换为列表。
使用列表推导式可以生成满足指定条件的列表,格式如下。

例如:

删除列表的格式:del listname,其中listname为列表名。
1.4.2 元组
Python的元组(Tuple)是另一个重要的序列结构,与列表的不同之处在于元组的元素不能修改;元组使用小括号,列表使用方括号。元组创建方法很简单,只需要在括号中添加元素,并使用逗号隔开即可,元组中的元素可以是整数、实数、字符串、列表、元组等任何类型,同一元组的元素类型可以相同,也可以不相同。
使用赋值运算符“=”将一个元组赋值给变量,语法格式如下。

其中t1为元组变量名,elemnet-为元组中的元素,元素的数量没有限制,元素的类型是Python支持的类型,可以是相同类型,也可以是不同类型,例如:

元组的内置函数有两个,说明如下。
(1)count(element):返回元素在元组的数量。
(2)index(element,start,end):返回元素的位置。
Python中包含的对元组的操作内置函数如下。
(1)cmp(t1, t2):比较两个元组元素。
(2)len(t1):计算元组元素个数。
(3)max(t1):返回元组中元素最大值。
(4)min(t1):返回元组中元素最小值。
(5)tuple(l1):将列表转换为元组。
删除元组的格式:del tuplename,其中tuplename为元组名。
1.4.3 字典
在Python中,字典和列表相似,也是可变序列,不同之处在于字典内容是以键值对的形式存放的,字典的每个键值对(key:value)用冒号分割,每个键值对之间用逗号分隔,整个字典包括在花括号{}中。
1.字典的创建和删除
字典的定义格式如下。

其中键(key)必须是独一无二的,但值(value)则不必。值可以取任何Python数据类型,但必须是不可变的,例如:

字典也可以通过映射进行创建,格式如下。

其中,l1表示生成字典键的列表,l2表示生成字典值的列表。
删除字典的方法如下。

2.字典的内置函数
字典的内置函数用于实现字典的常用操作,如图1-30所示。
字典的内置函数说明如下。
(1)clear ():删除字典中所有元素。
(2)copy ():返回字典(浅复制)的一个副本。
(3)fromkeys(keys,val=None):创建并返回一个新字典,以keys中的元素为字典的键,val用作该字典中所有键对应的初始值(默认为None)。
(4)get(key,default=None):返回字典键key对应的值,如果字典中不存在此键,则返回default值。

图1-30 字典的内置函数
(5)items():以列表返回可遍历的(key,value)数组。
输出字典的所有元素示例如下。

(6)keys():返回一个包含字典中键的列表。
(7)pop(key[,default]):删除字典指定键key所对应的值,返回值为被删除的值。key值必须给出,否则返回default值。
(8)popitem():随机返回并删除字典中的一对键和值。
(9)setdefault(key, default=None):和get()类似,但如果键不存在于字典中,将会添加键并将值设为default。
(10)update(d2):将字典d2的键值对添加到字典中。
(11)values():返回一个包含字典中所有值的列表。
1.4.4 集合
集合(Set)是一个可变序列,可以动态地添加或删除元素。集合是无序的,可以使用大括号{}或者set()函数创建集合。
1.集合创建方法
可采用如下两种方法创建集合。
(1)s1={value01,value02,...}。
(2)s2=set(list),其中list为列表。
类似于列表推导式,集合同样支持推导式创建,例如:

2.集合的内置函数
集合的内置函数用于实现集合的常用操作,如图1-31所示。

图1-31 集合的内置函数
集合的内置函数说明如下。
(1)add(element):添加一个元素到集合中。假如集合中已经有了该元素,则无效,因为集合是去重的。
(2)clear():清空集合的所有元素。
(3)copy():复制一个集合浅拷贝。
(4)difference(set2):计算两个集合的差集,返回一个集合,集合中的元素为当前集合减去指定集合。
(5)difference_update(set2):与difference方法的区别是差集合赋给原来的集合。
(6)discard(element):从集合中移除指定元素;如果没有,则不进行任何操作。
(7)intersection(set2):返回一个新集合,该集合是两个集合的交集。
(8)intersection_update(set2):与intersection(set2)方法的区别是把交集赋给前面的集合。
(9)isdisjoint(set2):进行判断,如果两个集合交集为空,则返回True,否则返回False。
(10)issubset(set2):判断该集合是否为指定集合的子集,如果是,则返回True,否则返回False。
(11)issuperset(set2):判断该集合是否为指定集合的父集,如果是,则返回True,否则返回False。
(12)pop():从集合中删除一个元素,并返回该元素,随机删除。
(13)remove(element):从集合中删除指定元素,如果集合中没有这个元素,则报异常。
(14)symmetric_difference(set2):返回一个集合,该集合为两个集合互为差集的合集,即(set1-set2)+(set2-set1)。
(15)symmetricdifferenceupdate(set2):与symmetric_difference()不同的是,该集合为两个集合互为差集的合集,并把该集合赋给前面的那个集合。
(16)union(set2):返回的集合是两个集合的并集。
(17)update(set2):求两个集合的并集,返回一个集合,该集合是两个集合的并集,并把该集合赋给前面的集合。
1.4.5 列表、元组、字典和集合的区别
它们之间的区别如表1-5所示。
表1-5 列表、元组、字典和集合的区别
