定義和初始化
#tuple() 使用工廠函式tuple定義一個空元組 #() 使用圓括號定義一個空元組 #(1,2,3) 使用圓括號定義有初始值的元組 #tuple(可迭代物件) 把可迭代物件轉換為一個元組 In [1]: tup=tuple();print(tup) () In [2]: tup=();print(tup) () In [3]: tup=(1,2,3);print(tup) (1, 2, 3) In [5]: tup=tuple(range(0,2));print(tup) (0, 1) #要定義一個只有1個元素的tuple,如果這麼定義: In [30]: tup=(1) In [31]: type(tup) Out[31]: int
#定義的不是tuple,是1這個數!這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1。 #所以只有1個元素的tuple定義時必須加一個逗號,,來消除歧義 In [32]: tup=(1,) In [33]: type(tup) Out[33]: tuple In [34]: print(tup) (1,) # Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免誤解成數學計算意義上的括號
元組是不可修改的
訪問元組元素
1. 通過索引訪問元素
In [7]: t=tuple(range(0,7));print(t) (0, 1, 2, 3, 4, 5, 6) In [8]: t[1] Out[8]: 1 In [9]: t[-1] Out[9]: 6
2. index()
In [21]: help(t.index) index(...) method of builtins.tuple instance T.index(value, [start, [stop]]) -> integer -- return first index of value. Raises ValueError if the value is not present. In [16]: print(t) (1, 2, 3, 2, 6) In [17]: t.index(2) Out[17]: 1 In [20]: t.index(2,1,3) Out[20]: 1
3. count()
In [21]: help(t.count) count(...) method of builtins.tuple instance T.count(value) -> integer -- return number of occurrences of value In [22]: t.count(2) Out[22]: 2
命名元組 nametuple
# namedtuple('名稱', [屬性list]): # namedtuple是一個函式,它用來建立一個自定義的tuple物件,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。 # 這樣一來,我們用namedtuple可以很方便地定義一種資料型別,它具備tuple的不變性,又可以根據屬性來引用,使用十分方便。 # 例如我們可以使用namedtuple來表示座標: In [35]: from collections import namedtuple In [36]: Circle=namedtuple('Circle',['x','y','z']) In [37]: C=Circle(2,2,3) In [38]: print(C.x);print(C.z) 2 3 # 建立的Circle物件是tuple的一種子類 In [39]: isinstance(C,Circle) Out[39]: True In [40]: isinstance(C,tuple) Out[40]: True # 所以C完全可以當做元組去使用 In [46]: C.index(2) Out[46]: 0 In [47]: print(C[1]) 2 In [48]: C.count(2) Out[48]: 2
#列表和元組的異同? #<相同點> 列表和元組都是容器,可以包含任意型別的元素(甚至是包含一個序列) 列表和元素也都包含元素的順序 #<差別> 列表是可變的,元組是不可變的 所以通常,在你有一些不確定長度的相同型別佇列時使用列表 在已知元素數量的情況下用元組