有了列表,為什麼 Python 還有元組?

2021-10-16 17:54:43 字數 1655 閱讀 8720

有了列表,為什麼 python 還有元組?

python中有乙個基礎的資料結構,叫做元組(tuple),但是一般挺少有人會去用它的,因為在開發過程中,列表(list)基本已經能夠滿足我們的需求。

即使是這樣,你也千萬不要就此認為元組是多餘的。不然在面試中也不會經常被人問,元組和列表有啥區別?為什麼需要元組?

以下兩點,第一點是大家所熟知的,而第二點可能只有老司機才會知道,只有學習了第二點,才算真正理解了元組存在的價值和意義。

不可變列表#

這是元組區別於列表最顯著的特徵。

list:可變的序列

tuple:不可變的序列

那什麼是不可變的序列呢?

那就是在元組物件生成後,諸如列表的插入元素、刪除元素、新增元素、清空元素、修改元素等功能,在元組中通通沒有,你是無法對其進行修改的。

由於元組是不可變的,所以其方法也是很有限的。這裡羅列一下。

copycopy

s1=(1,2,3)

s2=(4,5,6)

s1+s2

s1.add(s2)

2 in s1

s1.contains(2)

s1.count(2)

s1[0]

s1.getitem(0)

s1.index(2)

len(s1)

s1*n

2. 具名元組#

這個特性,我個人認為,才是元組存在的意義所在。

只講 具名元組,可能不太好理解。如果稱之為 帶欄位名的記錄,你可能就清楚了。

這裡舉個例子,但是實現帶欄位名,需要乙個庫(collections)的支援,你需要匯入它。

copycopy

from collections import namedtuple

city = namedtuple(「city」, 「name country polulation coordinates」)

tokyo = city(「tokyo」, 『jp』, 『36.93』, (『35.68』,『139,69』))

print(tokyo)

print(tokyo.name)

看著有點像字典,是不是,但是他不是字典(獲取數值的方法也與字典不同),字典是可變。元組在建立後,就無法再對其進行修改。這在某個程度上說明元組適合存放那些無需修改的資料。比如上面的,地名,國家,經緯度。

除了上面的用法之處,這裡還要介紹一些元組自己專有的屬性。

copycopy

print(city._fields)

(『name』, 『country』, 『polulation』, 『coordinates』)

latlong = namedtuple(『latlong』, 『lat long』)

xiamen_tuple = (『xiemen』, 『china』, 『40,54』, latlong(24.26,118.03))

xiamen = city._make(xiamen_tuple)

print(xiamen)

xiamen_dict = xiamen._asdict()

print(xiamen_dict)

這本書一共將近 200 頁,內含大量的**,製作之精良,值得每個 python 工程師 人手乙份。

微控制器中為什麼有了Flash還有EEPROM?

時,然後才能再下一次,這麼折騰一天也改不了幾次。歷史的車輪不斷前進,偉大的eeprom 出現了,拯救了一大批程式設計師,終於可以隨意的修改rom中的內容了。eeprom的全稱是 電可擦除可程式設計唯讀儲存器 即electrically erasable program mable read only...

微控制器中為什麼有了Flash還有EEPROM?

flash flash屬於廣義的eeprom,因為它也是電擦除的rom。但是為了區別於一般的按位元組為單位的擦寫的eeprom,我們都叫它flash。既然兩者差不多,為什麼微控制器中還要既有flash又有eeprom呢?通常,微控制器裡的flash都用於存放執行 在執行過程中不能改 eeprom是用...

微控制器中為什麼有了Flash還有EEPROM?

時,然後才能再下一次,這麼折騰一天也改不了幾次。歷史的車輪不斷前進,偉大的eeprom 出現了,拯救了一大批程式設計師,終於可以隨意的修改rom中的內容了。eeprom的全稱是 電可擦除可程式設計唯讀儲存器 即electrically erasable program mable read only...