前言
回顧前面的幾篇文章,我給大家講了 Python 中簡單的數據類型、列表的操作等等,今天給大家介紹一個新的數據存儲結構——元組。
1. 元組的定義
元組看起來和列表很像,但使用圓括號 ()
而不是方括號 []
來標識。定義元組後,就可以使用索引來訪問其元素,就像訪問列表一樣。
舉例說明,如果我們要存儲一個矩形的長和寬,使用元組來存儲的話,可以這樣寫:
rectangle = (200, 50)
print(rectangle[0])
print(rectangle[1])
我們首先定義了一個元素 rectangle
,接下來,我們分別打印該元組的各元素,訪問元組中元素的語法與訪問列表元素的語法相同。
運行這段代碼,結果如圖1-1:
看到這,聰明的你應該會產生這樣一個疑惑:既然 Python 已經提供了列表如此好用的存儲結構了,爲了什麼還要提供元組?
沒錯,元組和列表定義有細微的區別(一個用()
,一個用[]
),訪問方式更是一模一樣,咋看一下確實可以相互替代。
在這裏我要重點強調下:列表中元素是可修改的,而元組中元素是不可修改的。
下面我們來嘗試修改下元組中的元素,看看結果如何:
rectangle = (200, 50)
rectangle[0] = 100
我們只是想把矩形的長修改成 100,這在列表中很正常的操作,在元組中卻報了錯,報錯內容如圖1-2:
有些英文基礎的同學應該能看懂:TypeError: 'tuple' object does not support item assignment
,意思是:元組不支持這種操作。
由此,我們應該能直觀感受到了列表和元組的區別:列表非常適合用於存儲在程序運行期間可能變化的數據集,因爲列表是可以修改的。然而,有時你需要創建一系列不可修改的元素,這個時候元組可以滿足需求。
2. 遍歷元組
想列表一樣,也可以使用for
循環來遍歷元組中的所有值:
rectangle = (200, 50)
for value in rectangle:
print(value)
運行這段代碼,結果如圖2-1:
就像遍歷列表一樣,Python返回了元組中的所有值。
3. 修改元組變量
看到這裏,就算是聰明的你可能也有點懵,明明前面我花了大力氣又是舉例又是總結的就是想告訴你們元組中元素不可修改,怎麼到這節的大標題這麼明目張膽地打臉。
雖然筆者是微胖界的翹楚,但自覺臉夠大了,怎麼可能做出前後自相矛盾的事情呢。
且看我怎麼自圓其說!
前面我說的是元組中元素不可修改,這裏說的是修改元組變量。
也就是說,一旦一個變量中確定存儲了某個元組,那麼這個元組結構中存放的元素是無法被修改的,但是我可以扔掉整個元組,換上另一個元組啊。
打個形象的比方,桌上有個雞蛋籃子,你跟我說,籃子裏的雞蛋不能碰,好嘞,我不碰,但我可以把雞蛋籃子換成水果籃子吧,這樣我也沒有碰雞蛋籃子裏的雞蛋對不對。
那爲什麼會這樣呢?元組中元素不可變,但保存元素的變量卻可以改變。
請看圖3-1:
rectangle
變量原本存儲着 (200,50)
的地址,相當於有個指針,將 變量rectangle
指向數據 (200,50)
,但我們把雞蛋籃子換成水果籃子的做法相等於改變了指針的指向,現在 rectangle
指向了數據 (300,100)
。
落實到代碼上,實現就很簡單了:
rectangle = (200, 50)
print("原矩形:")
for value in rectangle:
print(value)
rectangle = (300, 100)
print("現矩形:")
for value in rectangle:
print(value)
我們首先定義了一個元組,將其存儲的矩形長寬打印了出來;
接下來,將一個新的元組存儲到變量中;
然後,打印新的矩形長寬。
這次 Python 沒有報錯,因爲給元組變量賦值是合法的。
運行結果如圖3-2:
相比於列表,元組是更簡單的數據結構。如果想存儲一組值在程序的整個生命週期內都不變,可使用元組。
結尾語
如果你在學習過程中有任何疑問,可以關注文章下方↓↓↓的公衆號及時與我聯繫,我們相互討論,共同學習。
最後,祝你學有所成。