元組
元組和列表類似,但屬於不可變序列,元組一旦創建,用任何方法都不可以修改其元素。
元組的定義方式和列表相同,但定義時所有元素是放在一對圓括號“()”中,而不是方括號中。
元組裏面數據元素可以是任意類型。
使用“=”將一個元組賦值給變量
>>> a_tuple = ('a', 'b', 'mpilgrim', 'z', 'example')
>>> a_tuple
('a', 'b', 'mpilgrim', 'z', 'example')
>>> a = (3)
>>> a
3
>>> a = (3,) #包含一個元素的元組,最後必須多寫個逗號
>>> a
(3,)
>>> a = 3, #也可以這樣創建元組
>>> a
(3,)
>>> x = () #空元組
元組創建與刪除
使用tuple函數將其他序列轉換爲元組
>>> tuple('abcdefg') #把字符串轉換爲元組
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> aList=[-1, -4, 6, 7.5, -2.3, 9, -11]
>>> tuple(aList) #把列表轉換爲元組
(-1, -4, 6, 7.5, -2.3, 9, -11)
>>> s = tuple() #空元組
>>> s
()
使用del可以刪除元組對象,不能刪除元組中的元素
訪問元組
與列表一樣,使用下標索引來訪問元組中的值。下標索引從0開始
也可進行切片
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5]) #從第一個取到第四個
修改元組
元組中的元素值是不允許修改的,我們可以對元組進行連接組合
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')
tup3 = tup1 + tup2;
print (tup3)
刪除元組
元素值不允許刪除,使用del語句來刪除整個元組
del tup3
元組與列表的區別
元組一旦定義就不允許更改。
元組沒有append()、extend()和insert()等方法,無法向元組中添加元素。
元組沒有remove()或pop()方法,也無法對元組元素進行del操作,不能從元組中刪除元素。
從效果上看,tuple( )凍結列表,而list( )融化元組。
元組運算符
元組之間可以使用 + 號和 * 號進行運算。這就意味着他們可以組合和複製,運算後會生成一個新的元組。
表達式 |
結果 |
描述 |
(1, 2, 3) + (4, 5, 6) |
(1, 2, 3, 4, 5, 6) |
連接 |
('Hi!',) * 4 |
('Hi!', 'Hi!', 'Hi!', 'Hi!') |
複製 |
3 in (1, 2, 3) |
True |
元素是否存在 |
for x in (1, 2, 3): print x |
1 2 3 |
遍歷 |
元組內置函數
函數 |
說明 |
len(tuple) |
元組長度,即元素個數 |
max(tuple) |
返回元組元素最大值 |
min(tuple) |
返回元組元素最小值 |
tuple(list) |
將列表轉成元組 |
元組的優點
元組的速度比列表更快。如果定義了一系列常量值,而所需做的僅是對它進行遍歷,那麼一般使用元組而不用列表。
元組對不需要改變的數據進行“寫保護”將使得代碼更加安全。
元組可用作字典的“鍵”,也可以作爲集合的元素。列表永遠不能當做字典鍵使用,也不能作爲集合的元素,因爲列表不是不可變的。
序列解包
實現了對多個變量的同事賦值。
PYTHON中的任何可迭代對象都可以進行解包:列表,元組,字典,字符串、range對象、zip對象、 enumerate對象等。
>>> v_tuple = (False, 3.5, 'exp')
>>> (x, y, z) = v_tuple
>>> x, y, z = v_tuple
>>> x, y, z = [0,1,2] #列表解包
>>> x, y, z = 1, 2, 3 #多個變量同時賦值
>>> x, y, z = range(3) #可以對range對象進行序列解包
PYTHON中的任何可迭代對象都可以進行解包:列表、元組、字典、集合、字符串、range對象、zip對象、 enumerate對象等。
表面:可直接用於for循環的對象統稱爲可迭代對象(iterable)。
語法層面:如果一個類實現了__iter__方法,那麼其實例化對象就是可迭代對象。
>>> a, b = b, a #交換兩個變量的值
>>> x, y, z = sorted([1, 3, 2]) #sorted()函數返回排序後的列表
>>> a, b, c = 'ABC' #字符串也支持序列解包
>>> x, y, z = iter([1, 2, 3]) #使用迭代器對象進行序列解包
序列解包遍歷多個序列
>>> keys = ['a', 'b', 'c', 'd']
>>> values = [1, 2, 3, 4]
>>> for k, v in zip(keys, values):
print((k, v), end=' ')
('a', 1) ('b', 2) ('c', 3) ('d', 4)
使用序列解包遍歷enumerate對象
>>> x = ['a', 'b', 'c']
>>> for i, v in enumerate(x):
print('The value on position {0} is {1}'.format(i,v))
The value on position 0 is a
The value on position 1 is b
The value on position 2 is c
使用序列解包遍歷zip對象
>>> aList = [1,2,3]
>>> bList = [4,5,6]
>>> cList = [7,8,9]
>>> dList = zip(aList, bList, cList)
>>> for index, value in enumerate(dList):
print(index, ':', value)
0 : (1, 4, 7)
1 : (2, 5, 8)
2 : (3, 6, 9)
Python 3.5以上版本還支持下面用法的序列解包
序列解包:同時對多個對象進行賦值
函數不定長參數,會用*序列解包。
>>> print(*[1, 2, 3], 4, *(5, 6))
1 2 3 4 5 6
>>> *range(4),4
(0, 1, 2, 3, 4)
>>> {*range(4), 4, *(5, 6, 7)}
{0, 1, 2, 3, 4, 5, 6, 7}
>>> {'x': 1, **{'y': 2}}
{'y': 2, 'x': 1}
例題
#創建一個tuple,順序包含0-19這20個數。
>>>atuple=[i for i in range(0,20)]
>>>atuple=tuple(atuple)
>>> print(atuple)
#遍歷上題的元組。
>>>print(*atuple)
#截取第一題中的後五個元素並打印(切片實現)
>>>for i in atuple[15::]:
>>> print(i)