元組
簡介
tuple
1.元組是以圓括號“()”包圍的資料集合,不同成員以“,”分隔。通過下標進行訪問
2.不可變序列,可以看做不可變的列表,與列表不同:元組中資料一旦確立就不能改變(所以沒有類似列表的增刪改操作,只有基本序列操作)
3.支援任意型別,任意巢狀以及常見的序列操作
4.元組通常用在使語句或使用者定義的函式能夠安全地採用一組值的時候,即被使用的元組的值不會改變
宣告及使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
t = () #空元組 t =(1,) #單個元素元組,注意逗號必須 t =(1,2,3) 1 in t #判斷 2 not in t #其他同序列基本操作:分片,索引 print t[0] print t[-1] print t[:2] #不會對原來元組造成影響 print t+(4,5) #返回新元組(1,2,3,4,5) print t * 2 #(1,2,3,1,2,3) t.index(1) t.count(1) #列表元組轉換 l = [1,2,3] lt = tuple(l) tl = list(lt) lt_sorted = sorted(l) #對元組進行排序,返回是列表 #字串轉元組(得到字元元組序列) print tuple('hello) #('h','e','l','l','o') |
tuple沒有append/extend/remove/pop等增刪改操作
tuple沒有find
檢視幫助
1 |
help(tuple) |
用途
1.賦值
1 2 |
t = 1,2,3 #等價 t = (1, 2, 3) x, y, z = t #序列拆封,要求左側變數數目和右側序列長度相等 |
2.函式多個返回值
1 2 3 4 |
def test(): return (1,2) x, y = test() |
3.傳參[強制不改變原始序列]
1 2 3 |
def print_list(l): t = tuple(l) #或者t = l[:] dosomething() |
4.字串格式化
1 |
print '%s is %s years old' % ('tom', 20) |
5.作為字典的key
優點
1.效能
tuple比列表操作速度快
若需要定義一個常量集,或者是隻讀序列,唯一的操作是不斷遍歷之,使用tuple代替list
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> a = tuple(range(1000)) >>> b = range(1000) >>> def test_t(): ... for i in a: ... pass ... >>> def test_l(): ... for i in b: ... pass ... >>> from timeit import Timer >>> at = Timer("test_t()", "from __main__ import test_t") >>> bt = Timer("test_l()", "from __main__ import test_l") |
簡單測試
1 2 3 4 5 |
>>> at.repeat(3, 100000) [1.526214838027954, 1.5191287994384766, 1.5181210041046143] >>> bt.repeat(3, 100000) [1.5545141696929932, 1.557785987854004, 1.5511009693145752] |
2.不可變性
對不需要的資料進行“防寫”,使程式碼更加安全
不可變性,若在程式中以列表形式傳遞物件集合,可能在任何地方被改變,使用元組,則不能
不可變性只適用於元組本身頂層而非其內容,例如元組內部的列表可以修改
1 2 3 |
l = [1,2,3] t = (1,2,l) l.append(4) |
不可變性提供了某種完整性,規範化,確保不會被修改,保持某種固定關係
修改的方法
1 |
tuple -> list -> tuple |
補充
元組定義易錯點
2013-08-31
一個和多個的區別是定義1個後面必須有”,”否則就是 型別 “str”
1 2 3 4 5 6 7 8 9 10 11 |
>>> t = ("a") >>> type (t) >>> t = ("a",) >>> type (t) >>> t = ("a","b") >>> type (t) >>> t = "a", >>> type(t) |
The end!
To be continue
wklken
打賞支援我寫出更多好文章,謝謝!
打賞作者
打賞支援我寫出更多好文章,謝謝!
任選一種支付方式