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

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

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

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

1. 不可變列表

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

  • list:可變的序列
  • tuple:不可變的序列

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

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

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

# s1和s2都是元組
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)

# 找到2第一次出現的索引
s1.index(2)

# 獲取長度
len(s1)

# 重複拼接
s1*n

2. 具名元組

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

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

這裏舉個例子,但是實現帶字段名,需要一個庫(collections)的支持,你需要導入它。

from collections import namedtuple
# 生成一個City類
City = namedtuple("City", "name country polulation coordinates")
# 實例化
tokyo = City("Tokyo", 'JP', '36.93', ('35.68','139,69'))

print(tokyo)
# City(name='Tokyo', country='JP', polulation='36.93', coordinates=('35.68', '139,69'))

print(tokyo.name)
# Tokyo

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

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

# 打印字段名
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)
# City(name='Xiemen', country='China', polulation='40,54', coordinates=(24.26, 118.03))

# 將具名元組轉爲OrderDict
Xiamen_dict = Xiamen._asdict()
print(Xiamen_dict)
# OrderedDict([('name', 'Xiemen'), ('country', 'China'), ('polulation', '40,54'), ('coordinates', LatLong(lat=24.26, long=118.03))])

總結一下,元組是一種很強大的可以當作記錄來用的數據類型,這纔是他存在的價值和意義所在。而爲人所熟知的,它的第二個角色纔是充當一個不可變的列表。(以上都是個人看法,如有不同見解,歡迎留言討論)

文末福利

本人原創的 《PyCharm 中文指南》一書前段時間一經發布,就火爆了整個 Python 圈,發佈僅一天的時間,下載量就突破了 1000 ,並且在當天就在 Github 上就收穫了數百的 star,截至目前,下載量已經破萬。

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

爲方便你下載,我將這本書上傳到 百度網盤上了,你可以自行獲取。

鏈接:https://pan.baidu.com/s/1-NzATHFtaTV1MQzek70iUQ

密碼:mft3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章