首页 > 代码库 > Python元组操作详解

Python元组操作详解

本文和大家分享的主要是python 元组操作相关内容,一起来看看吧,希望对大家 学习python有所帮助。
谈起元组,有了解的可能会觉得这个类型跟列表是非常相似的,操作方面也基本雷同,不过他们本质的区别是,元组是不可变数据类型,还记得我们之前提到过的字符串也是不可变数据类型吗?让我们再回顾下什么是不可变性,不可变性就是一旦一个对象被定义了,它的值就不能再本更新,除非是重新创建一个新的对象,那元组跟字符串的区别是,元组是一个容器对象,它可以包含一个或多个元素,基本特性我们  就介绍了这里,接下来我们看看具体的一些例子:
1 、元组创建
>>> t = ()>>> t
()>>> t = (1,2,3)>>> t
(1, 2, 3)
这里第一行就创建了一个空的元组,然后创建了一个保护三个元素的元组,元组的创建在这里要注意一点,如果你的元组里只有一个元素,要采用元素后加一个逗号的方式来表示,这个叫单元素元组,直接用(元素)的方式是不行的,例子如下:
>>> t = (’a’)>>> t’a’>>> t = (’a’,)>>> t
(’a’,)
2 、获取元组值
前面我们说过,元组的数据类型跟列表基本一样,它也支持切片,下标的方式去访问容器的值,例如:
>>> t = (’abc’, 20, [’f’,’g’])>>> t
(’abc’, 20, [’f’, ’g’])>>> t[0] ’abc’>>> t[2][0]’f’>>> t[2][5]
Traceback (mostrecentcalllast):
File "", line 1,  in < module>IndexError: listindexoutofrange
因为元组是容器类型,所以它也可以包含一个列表作为元素,访问值得时候可以通过切片方式访问其中的值,如果访问的值不存在就会显示超出索引范围的错误。
3 、元组更新
前面提到过因为元组是不可变类型,前面平时我们切片的操作也只是读取,不能够进行值得替换,否则会报错。
>>> t[0]’abc’>>> t[0] = ’bcd’
Traceback (mostrecentcalllast):
File "", line 1,  in < module>TypeError: ’tuple’ object doesnot supportitemassignment
如果要改变元组只能新创建一个新的对象:
>>> t
(’abc’, 20, [’f’, ’g’])>>> id(t)139702583814576>>> t = (’abc’, 20, [’f’, ’g’, ’h’])>>> t
(’abc’, 20, [’f’, ’g’, ’h’])>>> id(t)139702583814096
通过id() 函数就可以看出我们创建了一个新的对象, id() 函数官方解释如下:
 Return the “identity” ofanobject. This  is aninteger ( or long integer) whichis guaranteedto beuniqueand constantfor this object duringitslifetime. Twoobjectswithnon-overlappinglifetimesmayhavethesameid() value.
CPythonimplementationdetail: This  is theaddressoftheobject  in memory.
简单来说就是返回这个对象生命周期的一个唯一标示。
除了重新赋值,元组也支持“+” 字符的操作,通过 + 字符可以把两个元组连接起来生成一个新的元组。
>>> t1 = (’xyz’, 10)>>> t
(’abc’, 20, [’f’, ’g’, ’h’])>>> t1
(’xyz’, 10)>>> t2 = t + t1>>> t2
(’abc’, 20, [’f’, ’g’, ’h’], ’xyz’, 10)
关于元组的元素更新,还有一个特别的地方,就是虽然元组是不可变类型,但它包含的元素如果是可变对象,就可以改变其中的值,假如一个元组中包含一个列表,那这个列表中的值是可以变化的。
>>> t2
(’abc’, 20, [’f’, ’g’, ’h’], ’xyz’, 10)
>>> t2[2][1]
’g’
>>> t2[2][1]=’o’
>>> t2
(’abc’, 20, [’f’, ’o’, ’h’], ’xyz’, 10)
3 、列表和元组互转
如果有一个列表要转成元组,可以直接通过tuple() 函数操作,如果元组要转成列表可通过 list() 函数操作,有了这 2 个函数,这两个容器类型的数据结构转换非常 方便。
>>> t
(’abc’, 20, [’f’, ’o’, ’h’])>>>
>>> list(t)
[’abc’, 20, [’f’, ’o’, ’h’]]>>> tl = list(t)>>> tl
[’abc’, 20, [’f’, ’o’, ’h’]]>>>
>>>
>>> t = tuple(tl)>>> t
(’abc’, 20, [’f’, ’o’, ’h’])
除了这2 个函数,还有一些常用的例如 max(),min(),len() 等函数。
来源:mindg

Python元组操作详解