元组是Python中内置的一种数据结构。元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至元组。元组是写保护的,即元组创建后不能再做任何修改操作,元组通常代表一行数据,而元组中的元素代表不同的数据项。
一、元组的创建
Tuple(元组)由一系列元素组成,所有元素被包含在一对圆括号中。创建元组时,可以不指定元素的个数,相当于不定长的数组,但是一旦创建后就不能修改元组的长度。
元组创建的格式如下所示:
tuple_name = (元素1,元素2,...)
例子:元组的初始化
tuple_name = ("apple","banana","grape","orange")
创建空的元组需要一对空的圆括号
tuple_name=()
元组中只有一个元素
tuple_name=("apple",)
注意:
元组的索引是从0开始计数的,因此tuple[0]获得的是元组tuple中第1个元素。
二、元组的访问
元组中元素的值通过索引访问。元组的访问格式如下:
tuple_name[n]
元组创建后其内部元素的值不能被修改,如果修改元组中的某个元素,运行时将报错。所以,元组不支持赋值操作。
负数索引从元组的尾部开始计数,最尾部的元素索引表示为“-1”,次尾端的元素索引表示为“-2”。
例如:
tuple[-1]的值为value4
tuple[-2]的值为value3
分片(slice)是元组的一个子集,分片是从第1个索引到第2个索引(不包含第2个索引所指向的元素)所指定的元素。
分片索引可以为正数或负数,分片的格式如下所示:
tuple_name[m:n]
例如:
tuple_name[1:3]将返回(value2,value3,value4)
例子:演示负数索引和分片索引的使用方法
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] tuple = ("apple","banana","grape","orange") print tuple[-1] print tuple[-2] tuple2 = tuple[1:3] tuple3 = tuple[0:-2] tuple4 = tuple[2:-2] print tuple2 print tuple3 print tuple4
输出结果:
---------- python2.7 ---------- orange grape ('banana', 'grape') ('apple', 'banana') () 输出完成 (耗时 0 秒) - 正常终止
元组还可以由其他元组组成。
例如,二元元组可以表示为:
tuple = (("t1","t2"),("t3","t4"))
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] fruit1 = ("apple","banana") fruit2 = ("grape","orange") tuple = (fruit1,fruit2) print tuple print "tuple[0][1] = ",tuple[0][1] print "tuple[1][1] = ",tuple[1][1] print "tuple[0][1] = ",tuple[1][2]
输出结果:
---------- python2.7 ---------- (('apple', 'banana'), ('grape', 'orange')) tuple[0][1] = banana ---表示访问tuple元组中的第1个元组的第2个元素 tuple[1][1] = orange ---表示访问tuple元组中的第2个元组的第2个元素 tuple[0][1] = ---表示访问tuple元组中的第2个元组的第3个元素,因为这个元素不存在,元组的索引访问越界,返回如下的报错信息。 Traceback (most recent call last): File "Noname1.py", line 12, in <module> print "tuple[0][1] = ",tuple[1][2] IndexError: tuple index out of range 输出完成 (耗时 0 秒) - 正常终止
tuple元组的存储结构如下所示;
在Python中,将创建元组的过程称之为“打包”。相反,元组可以执行“解包”操作。解包可以将元组中的各个元素分别赋值给多个变量。这样,避免了使用循环遍历的方法去获取每个元素的值,降低了代码的复杂性,表达方式更自然。
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] #打包 tuple = ("apple","banana","grape","orange") #解包 a,b,c,d = tuple print a,b,c,d
输出结果:
---------- python2.7 ----------
apple banana grape orange
输出完成 (耗时 0 秒) - 正常终止
三、元组的遍历
元组的遍历是指通过循环语句依次访问元组中各元素的值。遍历元组需要用到range()和len()这两个函数。说明:range()和len()都是python的内建函数,这些函数可以直接调用,不需要import语句导入模块。
len()计算出tuple元组中元素的个数,range()返回一个由数字组成的列表。
range()的声明如下:
range([start,]stop[,step])-->list of integers 说明: 1、range()返回一个递增或递减的数字列表,列表的元素值由3个参数决定的 2、参数start表示列表开始的值,默认为0 3、参数stop表示列表结束的值,该参数不可缺少 4、参数step表示步长,每次递增或递减的值,默认值为1
例如:
range(5)返回的列表为[0,1,2,3,4]
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] #演示二元元组的遍历 tuple = (("apple","banana"),("grape","orange"),("watermelon",),("grapefruit",)) for i in range(len(tuple)): print "tuple[%d]"% i,"", for j in range(len(tuple[i])): print tuple[i][j],"", print
输出结果:
---------- python2.7 ---------- tuple[0] apple banana tuple[1] grape orange tuple[2] watermelon tuple[3] grapefruit 输出完成 (耗时 0 秒) - 正常终止
还可以使用map()对tuple元组进行“解包”,得到每个子元组,然后对每个子元组进行遍历,输出tuple元组中所有元素的值。
map()的声明如下:
map(function,sequence[,sequence,...])-->list 说明: 1、map()返回一个由自定义函数function处理后的列表; 2、参数funtion是创建的函数,该函数用于处理参数sequence。如果function的值为none,则map()返回一个由参数sequence组成的元组或列表; 3、参数sequence表示序列,元组和列表都是序列。
例子:
#!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2.7 #Author: [email protected] #演示map()实现元组的遍历 tuple = (("apple","banana"),("grape","orange"),("watermelon",),("grapefruit",)) k = 0 for a in map(None,tuple): print "tuple[%d]"% k,"", for x in a: print x,"", print k += 1
输出结果:
---------- python2.7 ---------- tuple[0] apple banana tuple[1] grape orange tuple[2] watermelon tuple[3] grapefruit 输出完成 (耗时 0 秒) - 正常终止