你們好,今天爲你們介紹一種更爲安全的Python內置數據類型:tuple(元組),以及它的基礎用法python
元組(tuple)是另外一種有序的數據類型,與list比較相似。主要不一樣的一點是tuple被建立後就不能對其進行修改。因此,tuple與list不一樣,沒有append(),pop(),insert()這些方法可使用。獲取元素的方法和list是同樣的,能夠經過索引來訪問(也是從0開始的),只不過不能賦值成爲其餘的元素。安全
由於 tuple不可變,因此代碼更安全。若是能夠的話,咱們儘可能使用tuple代替list。app
建立元組
# 定義一個空的tuple t = () print(t) Out:()
只有1個元素的元組在進行定義的時候,須要加一個逗號 , 來消除歧義,不然定義的就不是一個元組而是元素自己spa
t1 = (5) t2 = (5, ) print(t1) print(t2) Out: 5 (5,)
tup4 = (1, 2, 3, 4, 5 ); # 建立時直接賦值 tup5 = "a", "b", "c", "d"; # 建立時直接賦值 print(tup4) print(tup5) Out:(1, 2, 3, 4, 5) ('a', 'b', 'c', 'd')
一旦建立完,好比tup4 和 tup5 這兩個tuple不能變了,它也沒有append(),insert()這樣的方法。其餘獲取元素的方法和List是同樣的,咱們能夠正常地使用tup4[0],tup5[-1],但不能賦值成另外的元素code
訪問元組
訪問元組和List基本同樣,咱們能夠用切片很容易的查看元組中的元素,這裏很少說,看個小栗子:對象
tup4 = (1, 2, 3, 4, 5 ); tup5 = "a", "b", "c", "d"; print(tup4[0]) print(tup5[1:3]) print(tup5[::-1]) print(sorted(tup5,reverse=True)) # 使用sorted結果變成了List Out: 1 ('b', 'c') ('d', 'c', 'b', 'a') ['d', 'c', 'b', 'a']
理解元組的不可變
上面已經說過了,元組是不可變的,讓咱們來看下面這個小栗子:blog
test=('a','b',[1,2,3]) print(test) test[2][0]=100 print(test) Out: ('a', 'b', [1, 2, 3]) ('a', 'b', [100, 2, 3])
不知道有沒有朋友會有疑問? 你不是說元組不能變嘛,這裏怎麼回事,test元組的第三個元素是List,這裏咱們修改了List的值結果不是變了嗎?排序
這裏要給你們說明一下,tuple不可變指的是指向不變,也就是說test[2]永遠指向List[1,2,3],這裏是由於List可變,因此咱們才能修改成[100,2,3],可是改變先後test[2]的指向沒有發生任何變化,若是咱們想要直接改變test[2]的值,就會發現以下錯誤索引
test[2]=[100,2,3] Out: TypeError: 'tuple' object does not support item assignment
理解了「指向不變」後,若是咱們須要建立一個內容也不變的tuple怎麼作?那就必須保證tuple的每個元素自己也不能變。ip
元組的鏈接
如前面所說,元組是不可改的,可是能夠鏈接,咱們可使用 + 對元組進行鏈接:
t1 = (2,3,5) t2 = ('ricequant','python') t3 = t1 + t2 print(t3) Out:(2, 3, 5, 'ricequant', 'python')
元組的刪除
元組中的元素不能被刪除,可是咱們可使用 del 刪除整個元組,刪除後能夠從新定義,很是簡單,很少說啦
person = ('xiaobai',18,'paris') print(person) del person print(person) Out: ('xiaobai', 18, 'paris') NameError: name 'person' is not defined
元組的解包
這裏是比較有意思的地方,假設咱們有一個元組t以下:
t = ('foo', 'bar', 'baz', 'qux')
當咱們建立 t 時,實際上就是一個打包,過程展現以下圖:
那若是是解包呢? 換過來就好了呀
t = ('foo', 'bar', 'baz', 'qux') (s1, s2, s3, s4) = t print(s1,s2,s3,s4) Out:foo bar baz qux
當咱們執行(s1, s2, s3, s4) = t的時候,實際發生的狀況以下:
這裏注意一點,若是咱們嘗試解包一個元祖是傳遞的變量和元組實際元素數量不相符時會產生錯誤:
(s1, s2, s3) = t ValueError: too many values to unpack (expected 3) (s1, s2, s3, s4, s5) = t ValueError: not enough values to unpack (expected 5, got 4)
元組的互換swap
其實Python裏面還有一種很是簡單的建立元組的方法,那就是逗號,咱們若是用逗號分隔一些元素,會自動生成一個元組:
a = 'foo' b = 'bar' x= a, b print(x) Out:('foo', 'bar')
若是作一個簡單的互換很容易,只要這樣就能夠了:
x= b,a print(x) Out:('bar', 'foo')
元組的經常使用方法彙總
今天爲你們講解了我知道的有關tuple的一切,也爲你們展現了一些常規操做,但願可以幫助到你們,立刻就要到初五了,迎財神,吃餃子!!! 但願你們在2019大吉大利,大發橫財!!