一、元组特性介绍
- 元组和列表⼀样,也是⼀种序列类型的数据。
- 唯⼀的不同是,元组是相对不可变的。
二、⾼效创建元组
In [1]: t1 = () # 创建 空 元素的元组In [2]: type(t1)
Out[2]: tuple
有元素的元组实际上是使⽤英⽂的逗号创建的
In [3]: n = (3)In [4]: n
Out[4]: 3In [5]: type(n)
Out[5]: intIn [6]: t = 3,In [7]: t
Out[7]: (3,)In [8]: type(t)
Out[8]: tuple
创建⾮空元素的元组是⽤逗号 ,⽽不是⽤⼩括号
三、转换
tuple() 可以对其他序列类型的数据转换为元组。
In [9]: s1 = 'car'In [10]: s1
Out[10]: 'car'In [11]: list(s1)
Out[11]: ['c', 'a', 'r']In [12]: tuple(s1)
Out[12]: ('c', 'a', 'r')In [13]: t2 = tuple(s1)In [14]: t2
Out[14]: ('c', 'a', 'r')In [15]: tuple([1,2,3])
Out[15]: (1, 2, 3)
四、元组的取值
元组也是序列类型的数据,取值和切⽚和列表的操作⼀样
In [20]: t1 = (1,2,3, ['a','b'],'liang')In [21]: t1
Out[21]: (1, 2, 3, ['a', 'b'], 'liang')In [22]: t1[-1]
Out[22]: 'liang'In [23]: t1[-2]
Out[23]: ['a', 'b']In [24]: t1[-2][-1]
Out[24]: 'b'In [25]: t1[1:-1]
Out[25]: (2, 3, ['a', 'b'])In [26]: t1[3:-4]
Out[26]: ()In [27]: t1[3:4]
Out[27]: (['a', 'b'],)
五、元组的⽅法
count 统计⼀个元素在元组内出现的次数
index 返回⼀个元素在元组内的索引
In [20]: t1 = (1,2,3, ['a','b'],'liang')In [28]: t1. # 按 Tab 键count() index() # 可以看出没有可以改变其⾃身的⽅法In [28]: t1.count(1)
Out[28]: 1In [29]: t1.count(10)
Out[29]: 0In [30]: t1.index(1)
Out[30]: 0In [31]: t1.index(3)
Out[31]: 2
六、元组的相对不可变
元组本身是不可变的,就是元组内的元素是不可变的,⼀旦创建⼀个元组,这个元组内的元素个数和数据都是固定的了 相对不可变的意思是,元组内的元素⾃身是可变的数据对象,就可以通过修改这个可变元素,来间接改变元组的样⼦。
内置函数 id() , 这个函数可以返回python 中⼀个对象的内存地址(id 号)
In [32]: id('hello')
Out[32]: 140096984653232In [33]: t1
Out[33]: (1, 2, 3, ['a', 'b'], 'liang')In [34]: id(t1)
Out[34]: 140097075906512
接下来就来验证元组是相对不可变的
假设我想把上个示例中的元组 t1 中列表元素‘b’删除
In [35]: t1[-2]
Out[35]: ['a', 'b']In [36]: id(t1[-2]) # 改变前的 id
Out[36]: 140097076313776In [37]: t1[-2]
Out[37]: ['a', 'b']In [39]: t1[-2].pop()
Out[39]: 'b'In [40]: t1
Out[40]: (1, 2, 3, ['a'], 'liang')In [41]: id(t1[-2]) # 改变后的 id
Out[41]: 140097076313776
七、for 循环元组
In [43]: t = ('liang',1314,521)In [44]: for i in t:...: print(i)...:
#结果
liang
1314
521In [45]:
八、元组的优点
- 占⽤内存空间⼩
- 元组内的值不会被意外的修改
- 可作为字典的键
- 函数的参数是以元组形式传递的