談起元組,有了解的可能會覺得這個類型跟列表是非常相似的,操作方面也基本雷同,不過他們本質(zhì)的區(qū)別是,元組是不可變數(shù)據(jù)類型,還記得我們之前提到過的字符串也是不可變數(shù)據(jù)類型嗎?讓我們再回顧下什么是不可變性,不可變性就是一旦一個對象被定義了,它的值就不能再本更新,除非是重新創(chuàng)建一個新的對象,那元組跟字符串的區(qū)別是,元組是一個容器對象,它可以包含一個或多個元素,基本特性我們
就介紹了這里,接下來我們看看具體的一些例子:
1
、元組創(chuàng)建
>>> t = ()>>> t
()>>> t = (1,2,3)>>> t
(1, 2, 3)
這里第一行就創(chuàng)建了一個空的元組,然后創(chuàng)建了一個保護(hù)三個元素的元組,元組的創(chuàng)建在這里要注意一點(diǎn),如果你的元組里只有一個元素,要采用元素后加一個逗號的方式來表示,這個叫單元素元組,直接用(元素)的方式是不行的,例子如下:
>>> t = ('a')>>> t'a'>>> t = ('a',)>>> t
('a',)
2
、獲取元組值
前面我們說過,元組的數(shù)據(jù)類型跟列表基本一樣,它也支持切片,下標(biāo)的方式去訪問容器的值,例如:
>>> 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
因?yàn)樵M是容器類型,所以它也可以包含一個列表作為元素,訪問值得時候可以通過切片方式訪問其中的值,如果訪問的值不存在就會顯示超出索引范圍的錯誤。
3
、元組更新
前面提到過因?yàn)樵M是不可變類型,前面平時我們切片的操作也只是讀取,不能夠進(jìn)行值得替換,否則會報(bào)錯。
>>> t[0]'abc'>>> t[0] = 'bcd'
Traceback (mostrecentcalllast):
File "", line 1,
in <
module>TypeError: 'tuple' object doesnot supportitemassignment
如果要改變元組只能新創(chuàng)建一個新的對象:
>>> t
('abc', 20, ['f', 'g'])>>> id(t)139702583814576>>> t = ('abc', 20, ['f', 'g', 'h'])>>> t
('abc', 20, ['f', 'g', 'h'])>>> id(t)139702583814096
通過id()
函數(shù)就可以看出我們創(chuàng)建了一個新的對象,
id()
函數(shù)官方解釋如下:
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.
簡單來說就是返回這個對象生命周期的一個唯一標(biāo)示。
除了重新賦值,元組也支持“+”
字符的操作,通過
+
字符可以把兩個元組連接起來生成一個新的元組。
>>> t1 = ('xyz', 10)>>> t
('abc', 20, ['f', 'g', 'h'])>>> t1
('xyz', 10)>>> t2 = t + t1>>> t2
('abc', 20, ['f', 'g', 'h'], 'xyz', 10)
關(guān)于元組的元素更新,還有一個特別的地方,就是雖然元組是不可變類型,但它包含的元素如果是可變對象,就可以改變其中的值,假如一個元組中包含一個列表,那這個列表中的值是可以變化的。
>>> 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
、列表和元組互轉(zhuǎn)
如果有一個列表要轉(zhuǎn)成元組,可以直接通過tuple()
函數(shù)操作,如果元組要轉(zhuǎn)成列表可通過
list()
函數(shù)操作,有了這
2
個函數(shù),這兩個容器類型的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換非常 方便。
>>> 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
個函數(shù),還有一些常用的例如
max(),min(),len()
等函數(shù)。
來源:mindg