官术网_书友最值得收藏!

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)也可以直接應用在元組上,這與列表是一樣的,大家自己實踐一下就知道了。關于列表和元組,今后會談得更多,目前,就先聊到這里。

主站蜘蛛池模板: 个旧市| 兴宁市| 红河县| 东阿县| 通海县| 石楼县| 大兴区| 平湖市| 凤台县| 响水县| 禹城市| 昌邑市| 洛扎县| 都匀市| 田阳县| 东兴市| 开封县| 德兴市| 昌图县| 永清县| 昌都县| 廉江市| 交口县| 班戈县| 浦东新区| 铜梁县| 咸丰县| 临海市| 元江| 郧西县| 漠河县| 九龙坡区| 沽源县| 雷州市| 疏勒县| 绥中县| 龙岩市| 衡阳县| 吉木萨尔县| 浪卡子县| 乌拉特前旗|