本篇介绍Python中的元组数据类型,文中会讨论元组与列表的区别,元组的声明、赋值及其相关运算。通过本篇的学习,可以达成如下目标。
● 掌握元组和列表的区别
● 掌握元组的声明和赋值
● 掌握适用于元组的相关运算
Python元组和Python列表数据类似,都是线性表。唯一不同的是,Python元组赋值后所存储的数据不能被程序修改,可以将元组看作是只能读取数据不能修改数据的列表。因为元组类型和列表类型有很多相同之处,关于列表类型讲过的内容,不文不再重复讲述,重点讲述元组和列表的不同之处,然后讨论一下元组数据的不可修改特性。
1、元组声明与赋值
声明一个元组并赋值的语法与列表相同,不同之处是元组使用小括号,列表使用方括号,元素之间也是用英文逗号分隔。需要注意的是,当元组只有一个元素时,需要在元素的后面加一个英文逗号分隔符,以防止与表达式中的小括号混淆。这是因为小括号既可以表示元组,又可以表示表达式中的优先级算符,这就容易产生歧义。
例1:声明元组数据并赋值的例子
#创建存储字符串类型的元组
student = ('张明',"赵虎","马汉","李云龙","王义");
print(student);
#创建存储浮点型的元组
sealdata = (128.92,65.90,13809.1,79.689,0.23,127.00);
print(sealdata);
#创建存储复数类型的元组
complexdata = (64.375-1.27j,12.73-875J,0.026-0j);
print(complexdata);
#创建存储一个元素的元组
objdata = ('张明',);
print(objdata);
#创建嵌套元组
score = ('张明',(96,85,92),'赵虎',(98,89,100));
print(score);例1输出结果如下图所示。
2、 元组的访问
元组的访问和列表相同,可以直接使用下标索引访问元组中的单个数据项,也可以使用截取运算符访问子元组。访问运算符包括“[]”和“[:]”运算符,用于访问元组中的单个数据项,或者一个子元组。
例2:访问元组元素的例子
#创建存储字符串类型的元组
student = ('张明',"赵虎","马汉","李云龙","王义");
#访问值为张明和马汉的元素
print(student[0]+":"+student[2]);
#创建存储浮点型的元组
sealdata = (128.92,65.90,13809.1,79.689,0.23,127.00);
#访问值为79.689和127.00的元素
print("%.2f:%.2f" % (sealdata[3],sealdata[5]));
#创建存储复数类型的元组
complexdata = (64.375-1.27j,12.73-875J,0.026-0j);
#访问列表的第2个元素
print(complexdata[1]);
#创建存储一个元素的元组
objdata = ('张明',);
#访问列表的第1个元素
print(objdata);
#创建嵌套元组
score = ('张明',(96,85,92),'赵虎',(98,89,100));
#访问张明的成绩单
print("张明的成绩:语文:%d 数学:%d 英语:%d" % (score[1][0],score[1][1],score[1][2]));例2输出结果如下图所示。

3、 如何更新元组
元组是不可修改类型,虽然在程序运行过程中无法对元组的元素进行插入和删除运算。但元组可以通过再构造一个新的元组替换旧的元组,来实现元素的插入和删除。
例3:更新元组元素的例子
#创建存储字符串类型的元组
student = ('张明',"赵虎","马汉","李云龙","王义");
print(student);
#给student重新赋值
student = ('张明',"赵虎");
print(student);
#创建存储浮点型的元组
sealdata = (128.92,65.90,13809.1,79.689,0.23,127.00);
print(sealdata)
#给sealdata重新赋值
sealdata = sealdata[0],sealdata[2]
print(sealdata)例3输出结果如下图所示。

4、 元组的合并
可以把多个元组合并成一个元组,合并后的元组元素顺序保持不变。合并后的元组为一个新的元组,原有的元组保持不变。
例4:元组合并的例子
#创建存储字符串类型的元组
student = ('张明',"赵虎","马汉","李云龙","王义");
print(student);
#创建存储浮点型的元组
sealdata = (128.92,65.90,13809.1,79.689,0.23,127.00);
print(sealdata);
#创建存储复数类型的元组
complexdata = (64.375-1.27j,12.73-875J,0.026-0j);
print(complexdata);
#合并元组
mergedata = student + student + complexdata;
print(mergedata);例4输出结果如下图所示。

5、 元组的遍历
元组的遍历方式和列表相同,都是应用for循环语句遍历元组的元素。
例5:元组遍历的例子
#创建存储字符串类型的元组
student = ('张明',"赵虎","马汉","李云龙","王义");
#元组迭代遍历
print("第一种遍历方式:利用迭代遍历")
for st in student:
print("序号:%s 值:%s" % (student.index(st) + 1, st))
#元组索引遍历
print("第二种遍历方式:利用索引遍历")
for i in range(len(student)):
print ("序号:%s 值:%s" % (i + 1, student[i]))
#应用枚举方式遍历
print("第三种遍历方式:利用枚举方法遍历")
for i, st in enumerate(student):
print ("序号:%s 值:%s" % (i + 1, st))例5输出结果如下图所示。

6、 操作元组的常用方法
和列表一样,适用于列表的方法也同样适用于元组的操作。但由于元组的不可修改特性,用于列表的排序、替换、添加等方法,在元组中不能使用。可以使用的主要方法有计算元组个数、求元组中最大值、求元组中最小值等方法。
例6:操作元组方法的例子
#创建存储浮点型的元组
sealdata = (128.92,65.90,13809.1,79.689,0.23,127.00);
print(sealdata);
#求元组元素的个数
count = len(sealdata)
print("sealdata元组的个数为:%d" % count);
#求元组的最大值
max = max(sealdata);
print("sealdata元组的最大值为:%.2f" % max);
#求元组的最小值
min = min(sealdata);
print("sealdata元组的最小值为:%.2f" % min);
#将列表转换为元组
student = ['have',"not","like","at","bike"];
tuplestedent = tuple(sealdata);
print(tuplestedent);例6输出结果如下图所示。

7、 元组的不可修改特性
元组的不可修改特性可能会让元组变得非常不灵活,因为元组作为容器对象,很多时候需要对容器的元素进行修改,这在元组中是不允许的。元组可以说是列表数据的一种补充,数据的不可修改性在程序设计中也是非常重要的。例如,当需要将数据作为参数传递给API,但不希望API修改参数时,就可以传递一个元组类型;再如,当需要定义一组Key时,也可以采用元组类型。因此可以说元组和列表是互为补充的数据类型。
课程小结
元组与列表相同,也是容器对象,可以存储不同类型的内容。元组与列表有两个不同点。第一个不同点是元组的声明使用小括号,而列表使用方括号,当声明只有一个元素的元组时,需要在这个元素的后面添加英文逗号;第二个不同点是元组声明和赋值后,不能像列表一样添加、删除和修改元素,也就是说元组在程序运行过程中不能被修改。
用于列表的排序、替换、添加等方法也不适用于元组,适用于元组的主要运算有元组的合并、遍历、求元组的最大值和最小值等操作方法。