- 零基礎入門學習Python(第2版)
- 小甲魚
- 1177字
- 2019-12-20 12:19:38
5.2 元組:戴上了“枷鎖”的列表

視頻講解
接下來介紹的是列表的“表親”——元組。
元組和列表的最大區別是:元組只可讀,不可寫。也就是說,可以任意修改(插入/刪除)列表中的元素,而對于元組來說這些操作是不行的,元組只可以被訪問,不能被修改。
5.2.1 創建和訪問一個元組
元組和列表,除了不可改變這個顯著特征之外,還有一個明顯的區別:創建列表用的是中括號,而創建元組大部分時候使用的是小括號:
>>> tuple1 = (1, 2, 3, 4, 5, 6, 7, 8) >>> tuple1 (1, 2, 3, 4, 5, 6, 7, 8) >>> type(tuple1) <class 'tuple'>
注意:
tuple即元組的意思。
訪問元組的方式與列表無異,也是通過索引值訪問一個或多個(切片)元素:
>>> tuple1[1] 2 >>> tuple1[5:] (6, 7, 8) >>> tuple1[:5] (1, 2, 3, 4, 5)
復制一個元組,通常可以使用切片來實現:
>>> tuple2 = tuple1[:] >>> tuple2 (1, 2, 3, 4, 5, 6, 7, 8)
如果試圖修改元組,那么抱歉,Python會很快通過報錯來回應:

列表的標識符是中括號([]),那么元組的標識符號是什么呢?
小甲魚相信90%的朋友都會不假思索地回答:小括號!是這樣嗎?不妨來做個實驗:
>>> tuple1 = (520) >>> type(tuple1) <class 'int'>
這里,type()函數告訴我們temp變量是int(整型)。
是的,小括號還有其他的功能,在這里它就被當作操作符使用了……所以,如果想要元組中只包含一個元素,可以在該元素后面添加一個逗號(,)來實現:
>>> tuple1 = (520,) >>> type(tuple1) <class 'tuple'>
其實小括號也是可以不要的:
>>> tuple2 = 520, >>> tuple1 == tuple2 True >>> tuple3 = 1, 2, 3, 4, 5 >>> type(tuple3) <class 'tuple'>
發現了吧?逗號(,)才是關鍵,小括號只是起到補充的作用。再舉個例子來對比:
>>> 8 * (8) 64 >>> 8 * (8,) (8, 8, 8, 8, 8, 8, 8, 8)
5.2.2 更新和刪除元組
有的讀者可能會說,剛才不是說“元組是板上釘釘不能修改的嗎?”現在又來談更新一個元組,小甲魚你這不是自己自相矛盾嗎?
大家不要激動……我們只是討論一個相對靈活的做法,與元組的定義并不沖突。由于元組中的元素是不允許被修改的,但這并不妨礙我們創建一個新的同名元組:

這段代碼其實是利用切片和拼接實現更新元組的目的,它并不是修改元組自身,而是耍了“貍貓換太子”的小手段。
下面代碼可以證明小甲魚所言非虛:

id()函數用于返回指定對象的唯一id值,這個id值可以理解為現實生活中的身份證,在同一生命周期中,Python確保每個對象的id值是唯一的。上面兩個元組雖然都叫x_men,但是id值出賣了它們——兩者并不是同一個對象。
5.1.4節介紹了三種方法刪除列表里邊的元素,但是由于元組具有不可以被修改的原則,所以刪除元素的操作理論來說是不存在的。如果非要這么做,建議使用上面的技巧實現:
>>> temp = temp[:2] + temp[3:] >>> x_men = x_men[:1] + x_men[2:] >>> x_men ('金剛狼', '暴風女', '火鳳凰', '鐳射眼')
刪除整個元組,只需要使用del語句:

其實在日常開發中,很少使用del去刪除整個元組,因為Python的垃圾回收機制會在某個對象不再被使用的時候自動進行清理。
最后小結一下哪些操作符可以使用在元組上,拼接操作符和重復操作符剛剛演示過了,關系操作符、邏輯操作符和成員關系操作符(in和not in)也可以直接應用在元組上,這與列表是一樣的,大家自己實踐一下就知道了。關于列表和元組,今后會談得更多,目前,就先聊到這里。
- DBA攻堅指南:左手Oracle,右手MySQL
- MATLAB 2020 從入門到精通
- SQL語言從入門到精通
- Modular Programming in Java 9
- Visual Basic程序設計實踐教程
- Learning Probabilistic Graphical Models in R
- Python High Performance Programming
- Learning Unreal Engine Android Game Development
- TMS320LF240x芯片原理、設計及應用
- OpenCV 3 Blueprints
- Orchestrating Docker
- Building Slack Bots
- UML軟件建模
- INSTANT LESS CSS Preprocessor How-to
- Visual C++程序設計全程指南