一、元組的簡介
元組是個有序的序列,其中包含0至多個對象引用,元組是固定的,因此,不能替換或刪除其中包含的數據項。如果我們需要修改一個元組,可以使用list()函數將其轉換為列表,然后再對列表進行修改,最后通過使用tuple()再轉換為元組。
二、元組的創建
空元組可使用空圓括號()創建,也可以使用tuple()函數進行創建。包含一個或多個項的元組則使用逗號分隔進行創建。有時,為避免語義的二義性,必須將元組包含在圓括號內。例如將元組傳遞給函數或用函數創建元組時,應寫成function((1,2,3))和tuple((1,2,3))。
示例:
>>>a=() #創建空元組
>>>b=tuple() #利用函數創建空元組
>>>c=1,2,3 #創建含項的元組
>>>d=(1,2,3) #創建含項的元組
>>>e=tuple((1,2,3)) #利用函數創建含項的元組
>>>f=[1,2,3]
>>>g=tuple(e) #利用tuple()函數將列表轉換為元組
三、元組的操作
(一)元組項的讀取
我們首先創建一個示例元組:
>>>stu=('zhang','上海',16,'181厘米','足球')
>>>stu
('zhang','上海',16,'181厘米','足球')
stu[-5] | stu[-4] | stu[-3] | stu[-2] | stu[-1] |
---|---|---|---|---|
‘zhang' | '上海' | 16 | '181厘米' | '足球' |
stu[0] | stu[1] | stu[2] | stu[3] | stu[4] |
表:元組的索引位置
我們就可以通過索引位置來讀取元組中具體項的內容:
>>>stu[0]
'zhang'
>>>stu[-1]
'足球'
>>>stu[4]
’足球'
利用索引位置我們一次只能讀取一個項的內容,要讀取多項的內容我們可以使用分片。示例:
>>>stu[2:] #讀取從第三項開始的所有項的內容,與stu[-3:]的效果一樣
(16,'181厘米','足球')
>>>stu[-3:]
(16,'181厘米',‘足球')
>>>stu[1:3] #讀取第二,第三項的內容
('上?!?,16)
>>>stu[:] #讀取所有項內容
('zhang', '上海', 16, '181厘米', '足球')
(二)元組的其它操作
元組除了可以使用分片操作,還可以使用+(連接)和*(賦值)操作符。同時也可以使用in與not in來測試成員的關系。元組也可以使用比較操作符(<、<=、==、!=、>=、>)進行比較,比較是逐項進行的。
示例:
>>>a=(1,2)
>>>b=(1,2)
>>>c=(1,2,3)
>>>a==b
True
>>>a!=b
False
>>>a>c
False
>>>a=a*5 #此操作并不是改變元組的值,而是生成一個新的元組,再將a指向新的元組
(1,2,1,2,1,2,1,2,1,2)
>>>newstu=stu[:2]+('高中',)+stu[2:] #使用+連接符生成一個新的元組
>>>newstu
('zhang', '上海', '高中', 16, '181厘米', '足球')
(三)元組的方法
元組只提供了兩種方法:count(x),返回對象x在元組中出現的次數;index(x),返回對象在元組中從左邊算起第一次出現的位置,如果元組中不包含x時,則產生一個ValueError異常。
示例:
>>>a.count(1)
1
>>>a.index(2)
1
>>>a.index(3)
Traceback (most recent call last):
File "<pyshell#102>", line 1, in <module>
a.index(3)
ValueError: tuple.index(x): x not in tuple
(四)元組的嵌套
在一個元組內可以有多層嵌套的元組。任何嵌套層次的元組都可以使用上述的方式進行創建,也可以使用分片等方法。
示例:
>>>colors=('green','blue','red','yellow','gray')
>>>hair=('long',colors)
>>>hair #hair里面還嵌套一個元組
('long',('green','blue','red','yellow','gray'))
>>>hair[0] #取元組第一個項值
'long'
>>>hair[1][2] #取元組中第二項中的第三項值
'red'
>>>hair[1][2:-1]
('red','yellow')
四、命名的元組
根據索引位置選取元組中的項有時會非常不便 ,有時特別是在對付一些復雜嵌套結構的元組時會很容易造成混亂,我們可以使用collections模塊的namedtuple()函數來實現根據名稱引用元組中的項。
示例:
>>>import collections
>>>stu=collections.namedtuple("stu","name age high hobby")
collections.namedtuple()中的第一個參數是要創建的自定義元組數據類型的名稱,第二個參數是一個字符串,字符串中包含元組中每一項的名稱,中間用空格間隔。這里我們就創建了一個名為stu的自定義元組數據類型,下面我們就可以對其進行引用了。
>>>NO1=stu("zhang",16,"181厘米","足球")
>>>NO1.name
'zhang'