4.3 元组
元组是由简单的对象构成的,它和列表非常相似,但一定要注意的是元组是不可变的,它不支持任何方法的调用。也就是说我们不能编辑或改变元组。
关于元组的操作有很多和之前介绍的列表操作相类似,这里用程序结合程序的输出来看看具体如何操作。详细见程序4.4及其分析。
程序4.4:
输出:
分析:
我们先来看看程序的前5行,每行都定义了一个元组。在第1行中即使只有一个元素,也要加上',',否则不能被视为元组。再看看第2、3行,通过输出结果的第1、2行可知它们的作用是一样的,即使第3行没有用括号将元素括起来。由于t4使用了嵌套,可以使用第9行的取值方式操作嵌套的内容,注意,我们不能更改元组中的内容(若是更改元组的内容会引发TypeError: 'tuple' object does not support item assignment)。
程序的第5行使用了tuple函数将一个字符串类型转成元组,若是将函数的参数改为列表,它也可以将这个列表转为元组。
继续看程序的第10~14行,这些操作都是在前几个类型中很常见的操作了,这里不再多说。第15行使用元组的index()方法,它可以返回参数在元组中的索引值。注意,若参数不在元组中将报出一个ValueError。
通过输出结果的第10行可知,程序的第16行中的list(t2)可以将元组转换成列表并返回。因为元组也是可迭代对象,我们在程序的最后使用for…in循环输出元组的项。
为什么需要元组?
学习列表和字典后,再学习元组可能觉得它没有使用的必要,为什么有了列表还需要元组?其实这正是因为元组特有的特性:不可变性。这种特点提供了一种完整性,它可以保证元组所在处不会被程序修改,这正是列表不具备的,而且这使得元组还可以作为字典的键值。总之,元组可以处理那些固定关系的问题。
接下来再用一个列子巩固一下之前讲过的内容。假设我们已经得到一篇小短文中的某7个单词的出现次数,需要根据这个次数找到出现次数最多的单词,接下来看看在Python中是如何实现的。具体程序如程序4.5所示。
程序4.5 找到出现最多次的项:
输出:
分析:
在程序中我们使用了一个for循环遍历字典,使用item获取一组键-值,但是,要注意的是item是一个元组类型的变量,就拿第一次循环来说,item的值为('I', 4)。这是为了防止我们在使用字典的过程中修改了字典内容并导致程序产生错误。因此,可以使用元组加下标的方式使用item中的值用于比较,在这个过程中一定要注意的是不能改变元组的内容。在循环的过程中,我们使用if语句来选出最大值,并使用word保存最大值对应的键。最后将变量word输出。程序流程图如图4.3所示。
图4.3 程序流程图