注意:由于Python2将不再更新,为了避免大家混淆,以下的代码语法及特性都是基于Python3。
今天来聊聊Python的tuple(元组)类型,如果用一句话概括,那tuple类型就是“只读”的list,因为它有list类型大部分方法和特性。那你可能要问,为什么还要有tuple类型?原因就是正因为它的“只读”特性,在操作速度和安全性上会比list更快更好。
1.元组创建及取值(注意:任意无符号的对象,以逗号隔开即创建为元组)
>>> tuple1=(1, 2, 'three', 5.1, ['six', 7]) #( )可以有,也可以没有
>>> print(tuple1)
(1, 2, 'three', 5.1, ['six', 7])
>>> tuple1[2] #取下标索引为2的值
'three'
>>> tuple1[2:] #取下标索引为2及以后的所有值
('three', 5.1, ['six', 7])
>>> tuple1[3:5] #取下标索引为3到5的值
(5.1, ['six', 7])
>>> tuple2=() #创建空元组必须有()
>>> type(tuple2)
<class 'tuple'>
>>>
#当元组只有一个元素
>>> tuple3 = ('one') #不加逗号为原类型
>>> type(tuple3)
<class 'str'>
>>> tuple3 = ('one',) #加逗号为tuple类型
>>> type(tuple3)
<class 'tuple'>
#可以一次赋多值
>>> (x, y, z)=(1, 2, 3)
>>> print (x, y, z)
1 2 3
2.元组的修改与删除(注意:元组的元素是不能修改和删除的)
# 创建两个元组
>>> tuple5 = 1, 2
>>> tuple6 = (3, 5, 'seven')
>>> tuple6[1] = 50 #当试图修改元组元素时,会提示错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tuple7 = tuple5 + tuple6[2:] #但我们可以拼接组成新元组
>>> print(tuple7)
(1, 2, 'seven')
#删除元组
>>> print(tuple6) #打印出tuple6元素
(3, 5, 'seven')
>>> del tuple6 #删除元组
>>> print(tuple6) #再次打印,报错提示未定义
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'tuple6' is not defined
3.tuple的内置函数与方法
#元组中的函数
>>> tuple8 = (1, 2, 3, 4, 5) #创建元组
>>> len(tuple8) #返回元组元素个数
5
>>> min(tuple8) #返回元组中最小元素
1
>>> max(tuple8) #返回元组中最大元素
5
>>> list8 = [1, 2, 3, 4, 5] #创建和元组元素一样的list
>>> tuple8 == list8 #直接比较tuple8和list8,返回False
False
>>> tuple8 == tuple(list8) #将list8用tuple函数转换后再比较,返回True
True
#元组中的方法
>>> tuple8.count(5) #返回元素5在元组中出现的次数
1
>>> tuple8.index(3) #返回元素3在元组中的索引值
2
4.tuple和list对比
- tuple创建用小括号,list创建用方括号;
- tuple不能增加、修改、删除元素,但list可以;
- tuple操作速度比list快;
- tuple可以转换为list,list也可以转换为tuple;
- tuple和list都可以一次赋多值。
5.总结
通过学习元组的特性,除了操作速度快,在一些场景中,因为其不可变性本身也提供了完整性。比如使用元组来实现函数的多返回值,作为参数传递给函数调用,或是从函数调用那里获得参数时,可以保护其内容不被外部接口所修改。