5.2 序列数据的基本操作
5.2.1 序列的长度、最大值、最小值、求和
通过内置函数len()、max()、min()可以获取序列的长度、序列中元素的最大值、序列中元素的最小值。通过内置函数sum()可以获取列表或元组中的各元素之和;如果有非数值元素,则导致TypeError;对于字符串(str)和字节数据(bytes),也将导致TypeError。
【例5.1】 序列数据的求和示例。
【例5.2】 序列的长度、最大值、最小值操作示例。
5.2.2 序列的索引访问操作
序列表示可以通过索引下标访问的可迭代对象。用户可以通过整数下标访问序列s的元素。
索引下标从0开始,第1个元素为s[0],第2个元素为s[1],依此类推,最后一个元素为s[len(s)-1]。
如果索引下标越界,则导致IndexError;如果索引下标不是整数,则导致TypeError。例如:
序列s的索引下标示意图如图5-1所示。
图5-1 序列s的索引下标示意图
【例5.3】 序列的索引访问示例。
5.2.3 序列的切片操作
通过切片(slice)操作可以截取序列s的一部分。切片操作的基本形式如下。
或者
其中,i为序列开始下标(包含s[i]);j为序列结束下标(不包含s[j]);k为步长。如果省略i,则从下标0开始;如果省略j,则直到序列结束为止;如果省略k,则步长为1。
注意:下标也可以为负数。如果截取范围内没有数据,则返回空元组;如果超过下标范围,则不报错。
【例5.4】 序列的切片操作示例。
5.2.4 序列的连接和重复操作
通过连接操作符+可以连接两个序列(s1和s2),形成一个新的序列对象;通过重复操作符*可以重复一个序列n次(n为正整数)。序列连接和重复操作的基本形式如下。
连接操作符+和重复操作符*也支持复合赋值运算,即+=和*=。
【例5.5】 序列的连接和重复操作示例。
5.2.5 序列的成员关系操作
用户可以通过下列方式之一判断元素x是否存在于序列s中:
其中,指定范围[i,j)表示从下标i(包括,默认为0)开始,到下标j结束(不包括,默认为len(s))。
对于s.index(value,[start,[stop]])方法,如果找不到,则导致ValueError。例如:
【例5.6】 序列中元素存在性的判断示例。
5.2.6 序列的比较运算操作
两个序列支持比较运算符(<、<=、==、!=、>=、>),字符串比较运算按顺序逐个元素进行比较。
【例5.7】 序列的比较运算示例。
5.2.7 序列的排序操作
通过内置函数sorted()可以返回序列的排序列表。通过类reversed构造函数可以返回序列的反序迭代器。内置函数sorted()的形式如下。
其中,key是用于计算比较键值的函数(带一个参数),例如key=str.lower。如果reverse=True,则反向排序。
【例5.8】 序列的排序操作示例。
5.2.8 内置函数all()和any()
通过内置函数all()和any()可以判断序列的元素是否全部或部分为True,函数形式如下。
例如:
5.2.9 序列的拆分
1. 变量个数和序列长度相等
使用赋值语句可以将序列值拆分,然后赋值给多个变量,形式如下。
若变量个数和序列的元素个数不一致,将导致ValueError。例如:
2. 变量个数和序列长度不等
如果序列长度未知,可以使用*元组变量,将多个值作为元组赋值给元组变量。在一个赋值语句中,*元组变量只允许出现一次,否则将导致SyntaxError。例如:
3. 使用临时变量_
如果只需要部分数据,序列的其他位置可以使用临时变量_。例如: