元组跟列表很象,只是定义好以后,里面的数据不能修改。元组用小括号()表示。创建元组以后,可以对它进行索引、切片和各种运算。这部分内容跟列表的基本一样。
元组的创建和删除
可以使用(), tuple函数和zip函数等创建元组。下面用()创建元组,元组的元素可以是不同类型的数据。
>>> t=("dqexcel",0,{},False)
>>> t
('dqexcel', 0, {}, False)
小括号可以省略,即
>>> t="dqexcel",0,{},False
>>> t
('dqexcel', 0, {}, False)
如果元组只有一个元素,必须在末尾加逗号,例如
>>> t=(1,)
>>> t
(1,)
>>> type(t)
<class 'tuple'>
如果不加逗号,Python会把它作为整数处理。
>>> t=(1)
>>> t
1
>>> type(t)
<class 'int'>
使用tuple函数,可以将其他类型的可迭代对象转换为元组。其他可迭代对象包括字符串、区间、列表、字典、集合等。其他可迭代对象作为tuple函数的参数给出。
>>> tuple() #不带参数
()
>>> tuple("abcde") #转换字符串
('a', 'b', 'c', 'd', 'e')
>>> tuple(range(5)) #转换区间
(0, 1, 2, 3, 4)
>>> tuple([1,2,3,4,5]) #转换列表
(1, 2, 3, 4, 5)
>>> tuple({1:"杨斌",2:"范进"}) #转换字典
(1, 2)
>>> tuple({1,2,3,4,5}) #转换集合
(1, 2, 3, 4, 5)
使用zip()函数将多个列表对应位置的元素组合成元组,并返回zip对象。
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> c=zip(a,b)
>>> c
<zip object at 0x0000000002F61848>
用list函数将zip对象转换为列表。
>>> d=list(c)
>>> d
[(1, 4), (2, 5), (3, 6)]
可见,列表的元素为元组,它们由变量a和b对应位置的元素组合而成。
不能修改或删除元组中的元素,但是可以使用del命令删除整个元组。
>>> t=(1,2,3)
>>> del t
索引和切片
元组的索引和切片操作跟列表的相同,可以参阅1.5.3小节的内容。与列表不同的是,通过索引和切片将元组中的单个或多个元素提取出来以后,不能修改它们的值。
下面创建一个元组,用索引提取第1个元素和最后1个元素的数据。这里用到正向提取和反向提取,正向提取时基数为0,反向提取时从右向左计数,基数为-1,倒数第2个元素的索引号就是-2。
>>> t=(1,2,3)
>>> t[0]
1
>>> t[-1]
3
也可使用元组对象的index方法返回指定元素在元组中第1次出现的位置,位置索引号基数为0。下面返回元素3在元组中第1次出现的位置。
>>> t=(1,2,3,4,5,3,6)
>>> t.index(3)
2
该方法还可以有第2个参数和第3个参数,指定取值范围的起点和终点。省略终点时终点取最后1个元素。下面返回在元组第4个元素到末尾这个范围内元素3第1次出现的位置。
>>> t.index(3, 3)
5
切片操作规则也跟列表的相同,有正向和反向之分,请参阅1.5.3小节的内容。
>>> t=(1,2,3,4,5,6)
>>> t[1:5:2] #第2到第5个元素,每隔2个数取1次数
(2, 4)
>>> t[1:5] #取第2到第5个元素
(2, 3, 4, 5)
>>> t[1:] #取第2个到最后1个元素
(2, 3, 4, 5, 6)
>>> t[:5] #取第1个到第5个元素
(1, 2, 3, 4, 5)
>>> t[:] #取全部元素
(1, 2, 3, 4, 5, 6)
>>> t[-5:-2] #取倒数第5个到倒数第2个元素
(2, 3, 4)
>>> t[-5:] #取倒数第5个到倒数第1个元素
(2, 3, 4, 5, 6)
注意,无法修改和删除元组里面元素的值,例如下面试图将元组t中的第2个元素的值改为3时,给出出错信息。
>>> t=(1,2,3,4,5,6)
>>> t[1]=3
Traceback(most recent call last):
File "<pyshell#152>", line 1, in <module>
t[1]=3
TypeError: 'tuple' object does not support item assignment
基本运算和操作
可用运算符对指定元组进行操作。下面用加号(+)连接两个元组:
>>> (1, 2, 3)+(4, 5, 6)
(1, 2, 3, 4, 5, 6)
用乘号(*)重复扩展给定元组:
>>> ("Hi")*3
('Hi', 'Hi', 'Hi')
用in或not in判断元组中是否包含或不包含指定元素,成立时返回True,否则返回False。
>>> 1 in(1, 2, 3)
True
>>> 3 not in(1, 2, 3)
True
用len函数计算元组的长度,即元组中元素的个数。
>>> t=(1,2,3,4,5,6)
>>> len(t)
6
用max函数和min函数返回元组中最大的元素和最小的元素。
>>> max(t)
6
>>> min(t)
1