- 零基础学Python(第2版)
- 黄传禄 张克强 赵越
- 1575字
- 2025-03-22 17:26:55
4.1.2 元组的访问
元组中元素的值通过索引访问,索引是一对方括号中的数字,索引也称为“下标”。元组的访问格式如下。
tuple[n]
其中,tuple[n]表示访问元组的第n个元素,索引n的值可以为0、正整数或负整数。前面一节已经提到了元组的输出方法,例如:
print (tuple[1])
上面这行代码将输出字符串“banana”,print语句表示输出,tuple[1]表示访问tuple的第2个元素。
可以把元组理解为数组,使用C或Java语言编程的读者应该不会陌生,数组的下标是从0开始计数,而元组中元素的访问也符合这个规则。
元组创建后其内部元素的值不能被修改,如果修改元组中的某个元素,运行时将报错。例如:
tuple[0] = "a"
对tuple元组中第1个元素进行赋值,运行代码后错误信息如下:
TypeError: 'tuple' object does not support item assignment
可见,元组中的元素并不支持赋值操作。
注意 元组不能添加或删除任何元素。因此,元组不存在任何添加、删除元素的方法,元组也不存在任何其他方法。
元组的访问还有一些特殊的用法,这些用法对于获取元组的值非常方便,例如负数索引和分片索引。这两个特性是Python的特殊用法,C或Java语言并不支持。负数索引从元组的尾部开始计数,最尾端的元素索引表示“-1”,次尾端的元素索引表示“-2”,以此类推。图4-1演示了负数索引与元素的对应关系,tuple[-1]的值为value4,tuple[-2]的值为value3。
分片(slice)是元组的一个子集,分片是从第1个索引到第2个索引(不包含第2个索引所指向的元素)所指定的所有元素。分片索引可以为正数或负数,两个索引之间用冒号分隔。分片的格式如下所示:
tuple[m:n]
其中,m、n可以是0、正整数或负整数。
图4-2演示了分片索引与元素的对应关系,tuple[1:3]将返回(value2,value3,value4)。

图4-1 负数索引演示

图4-2 分片索引演示
下面【例4-1】这段代码将说明负数索引和分片索引的使用。
【例4-1.py】
01 tuple = ("apple", "banana", "grape", "orange") # 定义元组 02 print (tuple[-1]) # 分片,倒数第一个元素 03 print (tuple[-2]) # 分片,倒数第二个元素 04 tuple2 = tuple[1:3] # 分片,第二个元素到第三个元素(不包括第四个) 05 tuple3 = tuple[0:-2] # 分片,从第一个元素到倒数第二个元素(不包括倒数第二个) 06 tuple4 = tuple[2:-2] # 分片,从第三个元素到倒数第二个元素(不包括倒数第二个) 07 print (tuple2) 08 print (tuple3) 09 print (tuple4)
【代码说明】
·元组的索引可以用负数表示,第2、3行代码将分别输出“orange”和“grap”。
·使用分片截取后,将得到一个新的元组。第4行到第6行代码分别创建了3个元组。
·tuple2输出结果:('banana','grape')
·tuple3输出结果:('apple','banana')
·tuple4输出结果:()
元组还可以由其他元组组成。例如,二元元组可以表示为:
tuple = (('t1', 't2'), ('t3', 't4'))
tuple是一个二元元组,该元组由('t1','t2')和('t3','t4')组成。
下面【例4-2】的代码说明了元组间的包含关系以及元组中元素的访问。
【例4-2.py】
01 fruit1 = ("apple", "banana") # 定义fruit1元组 02 fruit2 = ("grape", "orange") # 定义fruit2元组 03 tuple = (fruit1, fruit2) 04 print (tuple) 05 print ("tuple[0][1] =", tuple[0][1]) 06 print ("tuple[1][1] =", tuple[1][1]) 07 print ("tuple[1][1] =", tuple[1][2])
【代码说明】
·第3行代码创建了一个复合元组tuple,tuple由元组fruit1和fruit2组成。元组tuple的输出结果:
(('apple', 'banana'), ('grape', 'orange'))
·tuple[0][1]表示访问tuple元组中第1个元组的第2个元素,即fruit1元组中的第2个元素,可以把tuple理解为二维数组。tuple[0][1]输出结果:
tuple[0][1] = banana
·tuple[1][1]表示访问tuple元组中第2个元组的第2个元素,即fruit2元组中的第2个元素。tuple[1][1]输出结果:
tuple[1][1] = orange
·同理,tuple[1][2]将访问fruit2元组中的第3个元素,因为此元素不存在,元组的索引访问越界。运行后将输出如下错误信息:
IndexError: tuple index out of range
tuple元组的存储结构如图4-3所示。

图4-3 tuple元组的存储结构
创建元组的过程,Python称为“打包”。相反,元组也可以执行“解包”的操作。“解包”可以将包元组中的各个元素分别赋值给多个变量。这样,避免了使用循环遍历的方法获取每个元素的值,降低了代码的复杂性,使表达方式更自然。下面这个例子说明了元组“打包”和“解包”的过程。
01 #打包 02 tuple = ("apple", "banana", "grape", "orange") 03 #解包 04 a, b, c, d = tuple 05 print (a, b, c, d)
【代码说明】
·第2行代码创建了一个tuple元组,元组的创建即“打包”的过程。
·第4行代码使用了一个赋值操作,等号的右边是tuple元组,等号的左边有4个变量,元组tuple中的4个元素分别赋值给这4个变量。
·第5行代码输出4个变量的值,输出的结果如下:
apple banana grape orange