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*n2. 具名元組
這個特性,我個人認為,才是元組存在的意義所在。
只講 具名元組,可能不太好理解。如果稱之為 帶字段名的記錄,你可能就清楚了。
這里舉個例子,但是實現帶字段名,需要一個庫(collections)的支持,你需要導入它。
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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))])總結一下,元組是一種很強大的可以當作記錄來用的數據類型,這才是他存在的價值和意義所在。而為人所熟知的,它的第二個角色才是充當一個不可變的列表。
Python基礎太難學?小編創建了一個Python學習交流QQ群:531509025,群里有大量基礎入門知識,都是從零開始的,群里還有專業的人給你解答問題。尋找有志同道合的小伙伴,互幫互助,群里還有不錯PDF電子書!
總結
以上是生活随笔為你收集整理的Python中有了列表,为什么还有元组?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习Python一定要会的4个高阶函数
- 下一篇: Python基础教程:连接列表的八种方法