Python_元組

 

元組

元組和列表類似,但屬於不可變序列,元組一旦創建,用任何方法都不可以修改其元素。

元組的定義方式和列表相同,但定義時所有元素是放在一對圓括號“()”中,而不是方括號中。

元組裏面數據元素可以是任意類型。

使用“=”將一個元組賦值給變量

>>> 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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章