Python的元組與列表類似,元組一旦建立,元組中的資料一旦確立就不能改變,不能對元組中中的元素進行增刪改操作,因此元組沒有增加元素append、更新元素update、彈出元素pop等相關方法,只有簡單的索引和計數的方法。
列表不能作為字典的key, 而元組可以;列表不能做為集合的項,而元組可以。列表是不可雜湊unhashable的,列表元素可以被動態改變,所以沒有一個固定不變的雜湊值-這與集合要求的元素唯一性衝突;而元組的元素被禁止更新,其雜湊值在整個生命週期都不會變化,因此可以成為集合的元素。
元組中可以包含任何資料型別,也可以包含另一個元組,如:T=(1,2,3,('a','b'))
空元組(沒有元素的元組):T=(),含1個元素的元組:T=(1,),注意有逗號,多個元素的元組:T=(1,2,3)
一、元組的建立可以用多種方式構建元組,主要有以下四種,每個都會有相應的案例:
使用一對圓括號來表示空元組: ()
使用一個字尾的逗號來表示單元組: a, 或 (a,)
使用以逗號分隔的多個項: a, b, c or (a, b, c)
使用內建的 tuple(): tuple() 或 tuple(iterable)
'''1、使用一對圓括號來表示空元組: ()'''num_tuple = (1, 2, 3)'''2、使用一個字尾的逗號來表示單元組: a, 或 (a,)'''a = 'a',a('a',)type(a)tuple'''3、使用以逗號分隔的多個項: a, b, c or (a, b, c)'''t = 1,2,3t(1, 2, 3)type(t)tuplet = 1,2,3,#結尾多一個逗號也沒事,一樣的效果'''4、使用內建的 tuple(): tuple() 或 tuple(iterable)'''t = (1, 2, 3)t = tuple([1, 2
注意:使用元組的時候,如果只有一個元素記得加上一個逗號,不然就是一條賦值語句。
#表示式 一個賦值語句t = (1) #用type檢視下型別,是整數型別,並不是tuple型別type(t)intt = (1,) #加逗號元組
二、元組的方法
由於元組並不能夠像列表一樣修改,因此元組並沒有特別多的方法,就兩個方法,count和index。
print(dir(tuple))['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
1、index
作用:tuple的index方法:獲取指定元素的下標(就近原則,從左往右,找到第一個就結束)
用法:index(self, value, start=None, stop=None)
引數:
value-待查詢下標的元素start-查詢起始下標stop-查詢終止下標(查詢到stop前一個下標)t=('s','a','a','r',5)t.index('r')3t.index(5)4# index方法:根據元素找到其位置t = (1, 2, 3, 1, 2)t.index(1, 2) # 尋找第2個元素1的位置
2、count
作用:獲取指定元素在元組中出現的次數
用法:count(self, value)
引數:value-待查詢出現次數的元素
t.count('a')2t.count(5)1
3、其他操作
先生成兩個元組備用
s1=(1,2,3) s2=('a','b','c')
1)拼接生成新元組'''拼接生成新元組''' s1+s2(1, 2, 3, 'a', 'b', 'c')s1.__add__(s2) (1, 2, 3, 'a', 'b', 'c')
2)是否包含
'''是否包含'''2 in s1True s1.__contains__('a') Falses2.__contains__('a') True
3)獲取元素
'''獲取元素'''s1[0]1 s2.__getitem__(0) 'a'
4)獲取長度
'''獲取長度 '''len(s1)3s1.__len__()3
5)重複拼接
'''重複拼接'''s1*3(1, 2, 3, 1, 2, 3, 1, 2, 3)
6)刪除元組
元祖中的元素值不可以修改和刪除,但是我們可以使用 del 關鍵字刪除整個元組。
t= ("a", "b", "c")del ttname 't' is not defined
7)最大最小值
t= (10, 22, 0, 15, 40)max(t)40min(t)0
三、命名元組
對於元組,這個特性,我認為,才是元組存在的意義所在。只講命名元組,可能不太好理解。如果稱之為帶欄位名的記錄,你可能就清楚了。
這裡舉個例子,但是實現帶欄位名,需要另一個庫(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)Toky
看著有點像字典,是不是,但是他不是字典(獲取數值的方法也與字典不同),字典是可變。元組在建立後,就無法再對其進行修改。這在某個程度上說明元組適合存放那些無需修改的資料。比如上面的,地名,國家,經緯度。
除了上面的用法之處,這裡還要介紹一些元組自己專有的屬性。
四、與列表的比較類似的問題, 建議移步 StackOverflow 或者 python doc。
https://stackoverflow.com/questions/626759/whats-the-difference-between-lists-and-tuples
https://docs.python.org/zh-cn/3/library/stdtypes.html#sequence-types-list-tuple-range
翻譯部分觀點如下:
1、Tuples are immutable, lists are mutable.
元組是不可變的, 而列表是可變的。
2、Tuples are heterogeneous data structures, lists are homogeneous sequences. Tuples have structure, lists have order.
元組通常由不同的資料,而列表是相同型別的資料佇列。元組表示的是結構,而列表表示的是順序。舉個例子來講:當你想記錄棋盤上一個子的座標時, 應該使用元組; 當你想記錄棋盤上所有的子的座標(一系列相同的資料)時,應該使用列表。
# 表示一個點point = (1, 2)# 表示一系列點points = [(1, 2), (1, 3), (4, 5)]
3、 You can't use list as a dictionary identifier.
你不能將列表當作字典的key, 而元組可以。
a = (1, 2)b = [4, 5]c = {a: 'start point'} # OK {(1, 2): 'start point'}c = {b: 'end point'} # Error
4、Due to the smaller size of a tuple operation with it a bit faster but not that much to mention about until you have a huge amount of elements.
由於元組支援的操作比列表小, 所以元組會比列表稍稍快上那麼一丟丟。但是除非你有巨量的資料要去處理,否者這一點不需要特別強調。