元祖

元組

元組是一個固定長度,不可改變的Python序列對象。建立元組的最簡單方式,是用逗號分隔一列值:python

In [1]: tup = 4, 5, 6

In [2]: tup
Out[2]: (4, 5, 6)

當用複雜的表達式定義元組,最好將值放到圓括號內,以下所示:程序員

In [3]: nested_tup = (4, 5, 6), (7, 8)

In [4]: nested_tup
Out[4]: ((4, 5, 6), (7, 8))

tuple能夠將任意序列或迭代器轉換成元組:app

In [5]: tuple([4, 0, 2])
Out[5]: (4, 0, 2)

In [6]: tup = tuple('string')

In [7]: tup
Out[7]: ('s', 't', 'r', 'i', 'n', 'g')

能夠用方括號訪問元組中的元素。和C、C++、JAVA等語言同樣,序列是從0開始的:函數

In [8]: tup[0]
Out[8]: 's'

元組中存儲的對象多是可變對象。一旦建立了元組,元組中的對象就不能修改了:spa

In [9]: tup = tuple(['foo', [1, 2], True])

In [10]: tup[2] = False
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-c7308343b841> in <module>()
----> 1 tup[2] = False
TypeError: 'tuple' object does not support item assignment

若是元組中的某個對象是可變的,好比列表,能夠在原位進行修改:rest

In [11]: tup[1].append(3)

In [12]: tup
Out[12]: ('foo', [1, 2, 3], True)

能夠用加號運算符將元組串聯起來:code

In [13]: (4, None, 'foo') + (6, 0) + ('bar',)
Out[13]: (4, None, 'foo', 6, 0, 'bar')

元組乘以一個整數,像列表同樣,會將幾個元組的複製串聯起來:orm

In [14]: ('foo', 'bar') * 4
Out[14]: ('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')

對象自己並無被複制,只是引用了它。對象

拆分元組

若是你想將元組賦值給相似元組的變量,Python會試圖拆分等號右邊的值:ip

In [15]: tup = (4, 5, 6)

In [16]: a, b, c = tup

In [17]: b
Out[17]: 5

即便含有元組的元組也會被拆分:

In [18]: tup = 4, 5, (6, 7)

In [19]: a, b, (c, d) = tup

In [20]: d
Out[20]: 7

使用這個功能,你能夠很容易地替換變量的名字,其它語言多是這樣:

tmp = a
a = b
b = tmp

可是在Python中,替換能夠這樣作:

In [21]: a, b = 1, 2

In [22]: a
Out[22]: 1

In [23]: b
Out[23]: 2

In [24]: b, a = a, b

In [25]: a
Out[25]: 2

In [26]: b
Out[26]: 1

變量拆分經常使用來迭代元組或列表序列:

In [27]: seq = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]

In [28]: for a, b, c in seq:
   ....:     print('a={0}, b={1}, c={2}'.format(a, b, c))
a=1, b=2, c=3
a=4, b=5, c=6
a=7, b=8, c=9

另外一個常見用法是從函數返回多個值。後面會詳解。

Python最近新增了更多高級的元組拆分功能,容許從元組的開頭「摘取」幾個元素。它使用了特殊的語法*rest,這也用在函數簽名中以抓取任意長度列表的位置參數:

In [29]: values = 1, 2, 3, 4, 5

In [30]: a, b, *rest = values

In [31]: a, b
Out[31]: (1, 2)

In [32]: rest
Out[32]: [3, 4, 5]

rest的部分是想要捨棄的部分,rest的名字不重要。做爲慣用寫法,許多Python程序員會將不須要的變量使用下劃線:

In [33]: a, b, *_ = values

tuple方法

由於元組的大小和內容不能修改,它的實例方法都很輕量。其中一個頗有用的就是count(也適用於列表),它能夠統計某個值得出現頻率:

In [34]: a = (1, 2, 2, 2, 3, 4, 2)

In [35]: a.count(2)
Out[35]: 4
相關文章
相關標籤/搜索