麦子学院 2017-04-28 23:23
Python学习之元组操作
回复:0 查看:2321
谈起元组,有了解的可能会觉得这个类型跟列表是非常相似的,操作方面也基本雷同,不过他们本质的区别是,元组是不可变数据类型,还记得我们之前提到过的字符串也是不可变数据类型吗?让我们再回顾下什么是不可变性,不可变性就是一旦一个对象被定义了,它的值就不能再本更新,除非是重新创建一个新的对象,那元组跟字符串的区别是,元组是一个容器对象,它可以包含一个或多个元素,基本特性我们
就介绍了这里,接下来我们看看具体的一些例子:
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