另一種有序列表叫元組:tuple 。tuple 和 list 非常類似,但是 tuple 一旦初始化就不能修改。那么不能修改是指什么意思呢?
tuple 不可變是指當(dāng)你創(chuàng)建了 tuple 時(shí)候,它就不能改變了,也就是說(shuō)它也沒(méi)有 append(),insert() 這樣的方法,但它也有獲取某個(gè)索引值的方法,但是不能賦值。那么為什么要有 tuple 呢?那是因?yàn)?tuple 是不可變的,所以代碼更安全。所以建議能用 tuple 代替 list 就盡量用 tuple 。
元組創(chuàng)建很簡(jiǎn)單,只需要在括號(hào)中添加元素,并使用逗號(hào)隔開即可。
tuple1=('兩點(diǎn)水','twowter','liangdianshui',123,456)
tuple2='兩點(diǎn)水','twowter','liangdianshui',123,456
創(chuàng)建空元組
tuple3=()
元組中只包含一個(gè)元素時(shí),需要在元素后面添加逗號(hào)
tuple4=(123,)
如果不加逗號(hào),創(chuàng)建出來(lái)的就不是 tuple (元組),而是指 123 這個(gè)數(shù)了,這是因?yàn)槔ㄌ?hào) ()既可以表示 tuple,又可以表示數(shù)學(xué)公式中的小括號(hào),這就產(chǎn)生了歧義,因此,Python 規(guī)定,這種情況下,按小括號(hào)進(jìn)行計(jì)算,計(jì)算結(jié)果自然是 123 。具體看下圖 tuple4 和 tuple5 的輸出值

元組下標(biāo)索引從0開始,可以進(jìn)行截取,組合等。
tuple(元組)可以使用下標(biāo)索引來(lái)訪問(wèn)元組中的值
#-*-coding:utf-8-*-
tuple1=('兩點(diǎn)水','twowter','liangdianshui',123,456)
tuple2='兩點(diǎn)水','twowter','liangdianshui',123,456
print(tuple1[1])
print(tuple2[0])
輸出的結(jié)果:

上面不是花了一大段來(lái)說(shuō) tuple 是不可變的嗎?這里怎么又來(lái)修改 tuple (元組) 了。那是因?yàn)樵M中的元素值是不允許修改的,但我們可以對(duì)元組進(jìn)行連接組合,還有通過(guò)修改其他列表的值從而影響 tuple 的值。
具體看下面的這個(gè)例子:
#-*-coding:utf-8-*-
list1=[123,456]
tuple1=('兩點(diǎn)水','twowater','liangdianshui',list1)
print(tuple1)
list1[0]=789
list1[1]=100
print(tuple1)
輸出的結(jié)果:
('兩點(diǎn)水', 'twowater', 'liangdianshui', [123, 456])
('兩點(diǎn)水', 'twowater', 'liangdianshui', [789, 100])
可以看到,兩次輸出的 tuple 值是變了的。我們看看 tuple1 的存儲(chǔ)是怎樣的。

可以看到,tuple1 有四個(gè)元素,最后一個(gè)元素是一個(gè) List ,List 列表里有兩個(gè)元素,當(dāng)我們把 List 列表中的兩個(gè)元素 124 和 456 修改為 789 和 100 的時(shí)候,從輸出來(lái)的 tuple1 的值來(lái)看,好像確實(shí)是改變了,但其實(shí)變的不是 tuple 的元素,而是 list 的元素。tuple 一開始指向的 list 并沒(méi)有改成別的 list,所以,tuple 所謂的“不變”是說(shuō),tuple 的每個(gè)元素,指向永遠(yuǎn)不變。注意是 tupe1 中的第四個(gè)元素還是指向原來(lái)的 list ,是沒(méi)有變的。
tuple 元組中的元素值是不允許刪除的,但我們可以使用 del 語(yǔ)句來(lái)刪除整個(gè)元組
#-*-coding:utf-8-*-
tuple1=('兩點(diǎn)水','twowter','liangdianshui',[123,456])
print(tuple1)
del tuple1
與字符串一樣,元組之間可以使用 + 號(hào)和 * 號(hào)進(jìn)行運(yùn)算。這就意味著他們可以組合和復(fù)制,運(yùn)算后會(huì)生成一個(gè)新的元組。
| Python 表達(dá)式 | 結(jié)果 | 描述 |
|---|---|---|
| len((1, 2, 3)) | 3 | 計(jì)算元素個(gè)數(shù) |
| (1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 連接 |
| ('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 復(fù)制 |
| 3 in (1, 2, 3) | True | 元素是否存在 |
| for x in (1, 2, 3): print x, | 1 2 3 | 迭代 |
| 方法 | 描述 |
|---|---|
| cmp(tuple1, tuple2) | 比較兩個(gè)元組元素 |
| len(tuple) | 計(jì)算元組元素個(gè)數(shù) |
| max(tuple) | 返回元組中元素最大值 |
| min(tuple) | 返回元組中元素最小值 |
| tuple(seq) | 將列表轉(zhuǎn)換為元組 |