Python 元組,不可變的列表,滾雪球學 Python

whisperrr發表於2021-08-16

  今天新學習的概念叫做元組,其實學元組還是離不開列表,第一個知識點是元組的英文 tuple 要牢牢記住,第一個知識點是元組與列表的區別,列表的元素可以修改,元組的元素不可以修改,所以元素又可以稱為不可變的列表。

  列表用中括號 [] 進行定義,元組用小括號 () 進行定義,元組的語法格式如下:

  # my_tuple 是元組變數名,可以任意命名

  my_tuple = (元素1,元素2,元素3...)

  元組中的每一個資料也稱為元素,元素也可以是數字、字串或者列表等內容,輸出使用 print 函式即可。

  特別注意如果元組內的元素只有一個,需要在定義的時候在元素的右側增加一個英文逗號 ,,例如:

  # 只有一個元素

  my_tuple = (元素1,)

  下面就在 PyCharm 中進行一下實際的編碼吧。

  # 宣告一個元組物件

  my_tuple = (1, 2, 3)

  print(my_tuple)

  print(type(my_tuple))

  # 宣告一個元組物件

  my_tuple1 = ("www", "aaa", "ggg")

  print(my_tuple1)

  print(type(my_tuple1))

  # 宣告只有一個元素的元組物件

  my_tuple2 = ("www", )

  print(my_tuple2)

  print(type(my_tuple2))


  有列表在前,該部分學期起來就比較簡單了,在元組中獲取元素也是透過中括號 [] 加上索引的方式,與列表保持一致。

  列表也可以透過迴圈去輸出,可以自行透過 for 迴圈進行嘗試。

  列表中的元素可以透過索引去修改,但是元組不可以,以下程式碼會出現錯誤。

  # 宣告一個元組物件

  my_tuple = ("www", "aaa", "ggg")

  my_tuple[1] = "good"

  print(my_tuple)

  該錯誤提示如下:

  TypeError: 'tuple' object does not support item assignment

  原因為本篇部落格開始提及的元組不允許修改元素,上述錯誤翻譯之後表示 tuple 物件不支援賦值。


  由於元組與列表太相似了,接下來的一些知識點只做簡單羅列。

  切片適用於元組

  列表方法中不涉及修改列表元素的方法都可用於元組,例如 len,count …,如果列表方法會對元素進行修改,那不可用於元組,例如 append, insert… 如果想詳細查閱,回憶 dir 方法。

  部分列表可用的內建函式同樣適用於元組,例如 max、min…


  在開發程式碼的過程中,有時需要對列表與元組進行相互轉換,該轉換類似之前學習過的強制轉換的過程,核心的內建函式為 list 與 tuple。

  將元組修改為列表。

  my_tuple = ("www", "aaa", "ggg")

  my_list = list(my_tuple)

  print(my_list)

  將列表修改為元組。

  my_list = ["www", "aaa", "ggg"]

  my_tuple = tuple(my_list)

  print(my_tuple)


  函式 zip 可以將一個可迭代物件,如列表打包成元組,打包之後返回的是一個 zip 物件,說起來有點繞,而且應用的場景不是很明確,可以先看程式碼學習一下。

  en_names = ["apple", "orange", "pear"]

  cn_names = ["蘋果", "橘子", "梨"]

  zipData = zip(en_names, cn_names)

  print(zipData) # 列印 zipData

  print(type(zipData)) # 列印 zipData 資料型別

  print(list(zipData)) # 輸出 zipData 中的資料內容

  輸出結果:

  [('apple', '蘋果'), ('orange', '橘子'), ('pear', '梨')]

  透過程式碼你可以看到,zip 把兩個列表的資料合併了,每個列表中對應索引位置的元素合併在了一個元組裡面。上述程式碼中就出現了 apple 與 蘋果 對應,orange 與 橘子 對應,pear 與 梨 對應。

  如果放在 zip 函式的列表引數長度不相同,那 zip 會選擇元素最少的那個列表作為依據,形成對應關係。

  en_names = ["apple", "orange"]

  cn_names = ["蘋果", "橘子", "梨"]

  zipData = zip(en_names, cn_names)

  print(zipData) # 列印 zipData 大連無痛人流醫院  

  print(type(zipData)) # 列印 zipData 資料型別

  print(list(zipData)) # 輸出 zipData 中的資料內容

  該程式碼第一個列表有 2 個元素,第二個列表有 3 個元素,最終輸出的結果為:

  [('apple', '蘋果'), ('orange', '橘子')]

  如果在 zip 中的引數前面增加 * 符號,相當於解壓,返回二維矩陣式。

  程式碼如下:

  en_names = ["apple", "orange"]

  cn_names = ["蘋果", "橘子", "梨"]

  zipData = zip(en_names, cn_names)

  print(zipData) # 列印 zipData

  unzipData = zip(*zipData)

  print(unzipData) # 列印 unzipData

  print(list(unzipData)) # 列印 unzipData 內容


  元組既然與列表這麼相似,那為何 Python 還要專門設計一個元組資料型別來呢?

  相比於列表,元組有如下優點。

  因為其不可修改,可以保護資料;

  元組在底層資料結構上比列表簡單,佔用的資源少,程式執行速度快;(說了也不用記住的知識)

  元組很多時候回用作函式的返回值。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005147/viewspace-2787147/,如需轉載,請註明出處,否則將追究法律責任。

相關文章